如何在 pandas 中执行随着日期的每次更改而重新开始的累积计算?
How to perform cumulative calculations in pandas that restart with each change in date?
这是我的数据的简化版本:
Date and Time Price Volume
0 2015-01-01 17:00:00.211 2030.25 342
1 2015-01-01 17:00:02.456 2030.75 203
2 2015-01-02 17:00:00.054 2031.00 182
3 2015-01-02 17:00:25.882 2031.75 249
我想计算每天的累积量,这样最终结果会是这样的:
data['cum_Vol'] = data['Volume'].cumsum()
输出:
Date and Time Price Volume cum_Vol
0 2015-01-01 17:00:00.211 2030.25 342 342
1 2015-01-01 17:00:02.456 2030.75 203 545
2 2015-01-02 17:00:00.054 2031.00 182 182
3 2015-01-02 17:00:25.882 2031.75 249 431
请注意,在日期发生变化时如何重新开始计算,而不是执行常规 cumsum()
,在从 2015-01-01 到 2015-01-02 的示例中。
最简单的方法可能是将 'Date and Time' 设置为索引,然后使用 groupby
和 TimeGrouper
对日期进行分组。然后你可以申请 cumsum()
:
>>> df2 = df.set_index('Date and Time')
>>> df2['Volume'] = df2.groupby(pd.TimeGrouper('D'))['Volume'].cumsum()
>>> df2
Price Volume
DateandTime
2015-01-01 17:00:00.211 2030.25 342
2015-01-01 17:00:02.456 2030.75 545
2015-01-02 17:00:00.054 2031.00 182
2015-01-02 17:00:25.882 2031.75 431
之后您可以随时重新设置索引。
这是我的数据的简化版本:
Date and Time Price Volume
0 2015-01-01 17:00:00.211 2030.25 342
1 2015-01-01 17:00:02.456 2030.75 203
2 2015-01-02 17:00:00.054 2031.00 182
3 2015-01-02 17:00:25.882 2031.75 249
我想计算每天的累积量,这样最终结果会是这样的:
data['cum_Vol'] = data['Volume'].cumsum()
输出:
Date and Time Price Volume cum_Vol
0 2015-01-01 17:00:00.211 2030.25 342 342
1 2015-01-01 17:00:02.456 2030.75 203 545
2 2015-01-02 17:00:00.054 2031.00 182 182
3 2015-01-02 17:00:25.882 2031.75 249 431
请注意,在日期发生变化时如何重新开始计算,而不是执行常规 cumsum()
,在从 2015-01-01 到 2015-01-02 的示例中。
最简单的方法可能是将 'Date and Time' 设置为索引,然后使用 groupby
和 TimeGrouper
对日期进行分组。然后你可以申请 cumsum()
:
>>> df2 = df.set_index('Date and Time')
>>> df2['Volume'] = df2.groupby(pd.TimeGrouper('D'))['Volume'].cumsum()
>>> df2
Price Volume
DateandTime
2015-01-01 17:00:00.211 2030.25 342
2015-01-01 17:00:02.456 2030.75 545
2015-01-02 17:00:00.054 2031.00 182
2015-01-02 17:00:25.882 2031.75 431
之后您可以随时重新设置索引。