Панды: накопленная сумма с движущимся окном (следующие и предыдущие строки) - PullRequest
0 голосов
/ 21 января 2019

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

date     sales
201201   5
201202   5
201203   5
201204   5
201205   5
201206   5
201207   5
201208   5
201209   5
201210   5
201211   5
201212   5
201301   100
201302   100

И я хочу вычислить совокупную сумму продаж от начала до фактической даты + 12 месяцев

Так вот:

date     sales   expected
201201   5       60
201202   5       160
201203   5       260
201204   5       260 
201205   5       260
201206   5       260
201207   5       260
201208   5       260
201209   5       260
201210   5       260
201211   5       260
201212   5       260
201301   100     260
201302   100     260

Согласно этому вопросу Как вычислить совокупную сумму предыдущих N строк в пандах? Я пытался:

df['sales'].rolling(window=12).sum()

Однако я ищу что-то еще подобное:

df['sales'].rolling(window=['unlimited preceding, 11 following']).sum()

1 Ответ

0 голосов
/ 21 января 2019

Используйте cumsum непосредственно благодаря shift на 11, чем используйте ffill для заполнения NaN с предыдущим значением:

df['expected'] = df['sales'].cumsum().shift(-11).ffill()

А теперь:

print(df)

Является:

      date  sales  expected
0   201201      5      60.0
1   201202      5     160.0
2   201203      5     260.0
3   201204      5     260.0
4   201205      5     260.0
5   201206      5     260.0
6   201207      5     260.0
7   201208      5     260.0
8   201209      5     260.0
9   201210      5     260.0
10  201211      5     260.0
11  201212      5     260.0
12  201301    100     260.0
13  201302    100     260.0
...