Панды: добавление значений одного столбца в другой столбец, если дата отличается в указателе даты и времени - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть пандас с датой, такой как этот, где столбец даты и времени является индексом:

                         volume 
2018-04-08 15:52:26.110     43   
2018-04-08 15:53:26.110     17  
2018-04-08 15:54:26.110     10  
2018-04-09 12:40:35.877     15  
2018-04-09 12:41:35.877     16  

Мое требование - добавить еще один столбец TotalVolume, где он суммирует предыдущие значения, но только если даты совпадают.Желаемый вывод:

                          volume  TotalVolume
2018-04-08 15:52:26.110     43        43
2018-04-08 15:53:26.110     17        57 (43+17)
2018-04-08 15:54:26.110     10        67 (57+10)
2018-04-09 12:40:35.877     15        15
2018-04-09 12:41:35.877     16        31 (15+16)

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

вы можете сгруппировать фрейм данных по дате, и кумулятивное сумо столбца будет работать

df.index = pd.to_datetime(df.index)
df.groupby(df.index.date)['volume'].cumsum()
0 голосов
/ 11 сентября 2018

cumsum и pd.Grouper

Это обобщенный способ выполнения этой задачи, который можно использовать для любого типа частоты: Min, Hour, Week, BM,5H, ...

df.groupby(pd.Grouper(freq='D')).cumsum()

                         volume
2018-04-08 15:52:26.110      43
2018-04-08 15:53:26.110      60
2018-04-08 15:54:26.110      70
2018-04-09 12:40:35.877      15
2018-04-09 12:41:35.877      31

df.assign(TotVol=df.groupby(pd.Grouper(freq='D')).cumsum())

                         volume  TotVol
2018-04-08 15:52:26.110      43      43
2018-04-08 15:53:26.110      17      60
2018-04-08 15:54:26.110      10      70
2018-04-09 12:40:35.877      15      15
2018-04-09 12:41:35.877      16      31

groupby и df.index.date

df.groupby(df.index.date).cumsum()

df.assign(TotVol=df.groupby(df.index.date).cumsum())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...