Накопительная сумма по дням в питоне - PullRequest
0 голосов
/ 27 февраля 2019

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

        date      money
0     2018-01-01     20
1     2018-01-05     30
2     2018-02-15     7
3     2019-03-17     150
4     2018-01-05     15
...
2530  2019-03-17     350

И мне нужно:

[(2018-01-01,20),(2018-01-05,65),(2018-02-15,72),...,(2019-03-17,572)]

Итак, мне нужно накопить сумму денег за все дни: Пока я пыталсямногие вещи и самое близкое, что у меня есть, это:

graph_df.date = pd.to_datetime(graph_df.date)
temporary = graph_df.groupby('date').money.sum()
temporary = temporary.groupby(temporary.index.to_period('date')).cumsum().reset_index()

Но это дает мне ValueError: Неверная частота: дата

Может кто-нибудь помочь, пожалуйста?

Спасибо

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Не думаю, что вам нужна вторая группа.Вы можете просто добавить столбец с накопленной суммой.

Это поможет мне:

import pandas as pd
df = pd.DataFrame({'date': ['01-01-2019','04-06-2019', '07-06-2019'], 'money': [12,15,19]})
df['date'] = pd.to_datetime(df['date']) # this is not strictly needed

tmp = df.groupby('date')['money'].sum().reset_index()
tmp['money_sum'] = tmp['money'].cumsum()

Преобразование столбца даты в фактическую дату не требуется, чтобы это работало.

0 голосов
/ 27 февраля 2019
list(map(tuple, df.groupby('date', as_index=False)['money'].sum().values))

Редактировать :

df = pd.DataFrame({'date': ['2018-01-01', '2018-01-05', '2018-02-15', '2019-03-17', '2018-01-05'],
                   'money': [20, 30, 7, 150, 15]})

#df['date'] = pd.to_datetime(df['date'])
#df = df.sort_values(by='date')

temporary = df.groupby('date', as_index=False)['money'].sum()
temporary['money_cum'] = temporary['money'].cumsum()

Результат:

>>> list(map(tuple, temporary[['date', 'money_cum']].values))
[('2018-01-01', 20),
 ('2018-01-05', 65),
 ('2018-02-15', 72),
 ('2019-03-17', 222)]
0 голосов
/ 27 февраля 2019

вы можете попробовать использовать df.groupby('date').sum():

пример фрейма данных:

df
         date  money
0  01/01/2018     20
1  05/01/2018     30
2  15/02/2018      7
3  17/03/2019    150
4  05/01/2018     15
5  17/03/2019    550
6  15/02/2018     13



df['cumsum'] = df.money.cumsum()
list(zip(df.groupby('date').tail(1)['date'], df.groupby('date').tail(1)['cumsum']))

[('01/01/2018', 20),
 ('05/01/2018', 222),
 ('17/03/2019', 772),
 ('15/02/2018', 785)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...