我有一个像这样的 pandas dateframe,其中 datetime 列是索引:
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)
请您参考如下方法:
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())
