У меня есть следующий фрейм данных с попытками расходов (или транзакций) от разных пользователей, каждая попытка имеет дату и сумму.
user date amount
1 1 6
1 2 5
1 3 2
1 4 3
1 5 1
2 1 11
2 2 12
2 3 5
2 4 8
2 5 1
Допустим, я хочу наложить произвольный лимит на общую сумму потратил и проверил, через какие транзакции go (потому что пользователь не превышает лимит), а какие нет, допустим, лимит равен 10. Желаемый результат будет:
user date amount approved spent remaining_credit
1 1 6 1 6 4
1 2 5 0 6 4
1 3 2 1 8 2
1 4 3 0 8 2
1 5 1 1 9 1
2 1 11 0 0 10
2 2 12 0 0 10
2 3 5 1 5 5
2 4 8 0 5 5
2 5 1 1 6 4
В любом случае, чтобы рассчитать любой из 3 последних столбцов работ, чтобы решить мою проблему.
Первый (утвержденный, столбец номер 4) будет иметь 1 каждый раз, когда сумма операции меньше предела минус сумма суммы, потраченной предварительно .
Второй (потраченный) имеет совокупные расходы по утвержденным транзакциям.
Третий (remaing_credit) имеет оставшийся кредит после каждой предпринятой попытки.
Я пытался:
d1['spent'] = d1.sort_values('date').groupby('user')['amount'].cumsum()
d1['spent'] = d1.sort_values(['user','date']).spent.mask(d1.spent > limit).fillna(method='pat')
но тогда я не знаю, как перезапустить кумулятивную сумму, когда лимит снова не будет превышен.