我有一个像这样的大熊猫日期框架,其中datetime列是index:
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)
答案 0 :(得分:3)
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())
答案 1 :(得分:2)
您可以按日期对数据框进行分组,列的总和将起作用
df.index = pd.to_datetime(df.index)
df.groupby(df.index.date)['volume'].cumsum()