You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中实现基于日期的向前滚动求和?

实现向前滚动求和的解决方案

我明白你的需求啦!你现在用groupby+rolling得到的是向后滚动求和(从当前行往过去方向取7天的累计和),但你想要的是向前滚动求和(从当前行往未来方向取7天的累计和)对吧?

其实解决思路很简单:我们可以把每个分组的数据反转顺序,用你已经熟悉的滚动求和逻辑处理,最后再把结果反转回来,就等价于实现了向前滚动的效果。

具体代码实现

先把你的完整代码和解决方案整合在一起:

import pandas as pd
import numpy as np

# 生成原始DataFrame
dates = pd.date_range(start='2016-01-01', periods=20, freq='d')
df = pd.DataFrame({'A': [1] * 20 + [2] * 12 + [3] * 8, 
                   'B': np.concatenate((dates, dates)), 
                   'C': np.arange(40)})

# 按日期排序(你已经完成的步骤)
df.sort_values('B', inplace=True)
df.reset_index(drop=True, inplace=True)  # 重置索引让后续操作更顺畅

# 核心:实现向前滚动求和
forward_rolling_sum = df.groupby('A').apply(
    lambda group: group['C'][::-1].rolling(7, min_periods=0).sum()[::-1]
).reset_index(level=0, drop=True)

# 将结果合并到原DataFrame中
df['forward_rolling_C_sum'] = forward_rolling_sum

代码解释

  • group['C'][::-1]:把每个分组的C列数据反转顺序,这样原来的“未来行”就变成了“过去行”
  • rolling(7, min_periods=0).sum():对反转后的数据执行你已经熟悉的滚动求和,此时计算的就是原数据中当前行及未来6天的和
  • [::-1]:把求和结果再次反转,恢复原数据的顺序
  • reset_index(level=0, drop=True):移除groupby带来的额外索引层,让结果能和原DataFrame完美匹配

验证结果

比如看A=1的部分数据,向前滚动求和的结果会是:

ABCforward_rolling_C_sum
12016-01-0100+1+2+3+4+5+6 = 21
12016-01-0211+2+3+4+5+6+7 = 28
12016-01-0322+3+4+5+6+7+8 = 35
............

这正好是你想要的向前(未来方向)滚动7天的求和结果。

内容的提问来源于stack exchange,提问作者Ahamed Moosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:29:33