我有像这样的pandas数据框,其中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
and 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
and df.index.date
df.groupby(df.index.date).cumsum()
df.assign(TotVol=df.groupby(df.index.date).cumsum())
您可以按日期对数据框进行分组,并且列的累积总和将起作用
df.index = pd.to_datetime(df.index)
df.groupby(df.index.date)['volume'].cumsum()