Накопленная сумма всех предыдущих значений - PullRequest
0 голосов
/ 24 января 2020

Аналогичный вопрос был задан для cumsum и grouping, но это не помогло в моем случае.

У меня много лет финансового баланса, и мне нужно сложить все предыдущие значения по годам.

Это мой воспроизводимый набор:

df=pd.DataFrame(
{"Amount": [265.95,2250.00,-260.00,-2255.95,120],
"Year": [2018,2018,2018,2019,2019]})

Я хочу получить следующий результат:

Year  Amount
2017  0
2018  2255.95
2019  120.00
2020  120.00

Так что на самом деле в oop происходит от самый низкий год в моем наборе на самый высокий год в моем наборе.

...
df[df.Year<=2017].Amount.sum()
df[df.Year<=2018].Amount.sum()
df[df.Year<=2019].Amount.sum()
df[df.Year<=2020].Amount.sum()
...

1 Ответ

1 голос
/ 24 января 2020

Первый шаг - агрегирование sum, затем используйте Series.cumsum и Series.reindex с прямым пропуском пропущенных значений по всем возможным годам, при последнем замените первые пропущенные значения на 0:

years = range(2017, 2021)
df1 = (df.groupby('Year')['Amount']
         .sum()
         .cumsum()
         .reindex(years, method='ffill')
         .fillna(0)
         .reset_index())
print (df1)
   Year   Amount
0  2017     0.00
1  2018  2255.95
2  2019   120.00
3  2020   120.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...