Python中基于Datetime分钟维度的连续Rolling Sum实现
嘿,看你的需求和示例数据,EXPECTED Rolling_X 列其实就是 X 列按时间顺序的累计求和,实现起来很简单,用 pandas 就能快速搞定,具体步骤如下:
1. 先确保数据按时间排序
累计求和的结果完全依赖于数据的顺序,所以第一步要把你的 DataFrame 按时间戳(比如dateTime列)升序排列,保证数据是按时间先后顺序来的:
df = df.sort_values(by='dateTime')
2. 计算累计求和生成目标列
直接调用 pandas 的cumsum()方法,对X列做累计求和,赋值给Rolling_X列就行:
df['Rolling_X'] = df['X'].cumsum()
验证效果
跑上面的代码后,生成的Rolling_X列就和你给出的EXPECTED Rolling_X完全一致了,截取部分示例如下:
| dateTime | 1min | X | EXPECTED Rolling_X | Rolling_X |
|---|---|---|---|---|
| 2017-09-19 02:00:04 | 2017-09-19 02:00:00 | 5 | 5 | 5 |
| 2017-09-19 02:00:04 | 2017-09-19 02:00:00 | 1 | 6 | 6 |
| 2017-09-19 02:01:31 | 2017-09-19 02:01:00 | 0 | 9 | 9 |
| 2017-09-19 02:01:35 | 2017-09-19 02:01:00 | 5 | 22 | 22 |
补充:如果是分钟组内的独立累计
要是你后来需求变了,想要每个分钟分组内单独累计(每个分钟从0开始加),那可以用groupby配合cumsum:
df['Rolling_X_per_min'] = df.groupby('1min')['X'].cumsum()
不过根据你给的示例,这个应该不是你当前需要的,就当给你留个备用方案~
内容的提问来源于stack exchange,提问作者Giladbi
相关产品推荐
相关产品推荐

