Pandas:如果日期时间索引中的日期不同,则将一列的值添加到另一列

问题描述 投票:1回答:2

我有像这样的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)
python pandas numpy
2个回答
3
投票

cumsum and pd.Grouper

这是完成此任务的通用方法,可用于任何频率类型:MinHourWeekBM5H,...

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())

2
投票

您可以按日期对数据框进行分组,并且列的累积总和将起作用

df.index = pd.to_datetime(df.index)
df.groupby(df.index.date)['volume'].cumsum()
© www.soinside.com 2019 - 2024. All rights reserved.