Pandas совокупная сумма, начиная с последней строки, где было выполнено условие - PullRequest
4 голосов
/ 14 июля 2020

У меня есть фрейм данных следующей формы:

|----------|----|------|
|date      |type|inflow|
|----------|----|------|
|2017-01-01|I   |  3500|
|2017-02-01|A   |    23|
|2017-07-01|A   |    44|
|2017-09-01|A   |    55|
|2017-12-01|A   |    12|
|2018-01-01|I   |  3800|
|2018-03-01|A   |    87|
|2018-05-01|A   |    34|
|2018-07-01|A   |    23|
|----------|----|------|

I - начальный приток, а As - дополнительные притоки. Они не обязательно сгруппированы по годам, а даты могут быть произвольными. Мне нужна кумулятивная сумма в каждой строке, начиная с последнего раза, когда я встречаю I. Таким образом, кумулятивная сумма должна сбрасываться, когда я сталкиваюсь с другим I. Если это помогает, максимальное количество As между двумя Is может быть 5.

Я попытался использовать apply и rollapply, но не смог понять, как применить их к непоследовательному скользящему окну. Как это сделать, используя Pandas?

1 Ответ

4 голосов
/ 14 июля 2020

Попробуем GroupBy.cumsum:

df['inflow_cumsum'] = df.groupby(df['type'].eq('I').cumsum())['inflow'].cumsum()
df

         date type  inflow  inflow_cumsum
0  2017-01-01    I    3500           3500
1  2017-02-01    A      23           3523
2  2017-07-01    A      44           3567
3  2017-09-01    A      55           3622
4  2017-12-01    A      12           3634
5  2018-01-01    I    3800           3800
6  2018-03-01    A      87           3887
7  2018-05-01    A      34           3921
8  2018-07-01    A      23           3944

Подробнее df['type'].eq('I').cumsum() используется для обозначения групп притоков для выполнения групповой кумулятивной суммы.

См. Визуализацию ниже:

type  type == "I"  (type == "I").cumsum()
   I         True                       1
   A        False                       1
   A        False                       1
   A        False                       1
   A        False                       1
   I         True                       2
   A        False                       2
   A        False                       2
   A        False                       2

Вы заметите столбец с единицами и двойками это то, что будет однозначно идентифицировать группы, по которым будет проведено суммирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...