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

如何简化pandas滚动平均多移位结果求和的实现代码?

方案1:循环实现(可灵活调整移位次数,符合需求)

首先提前计算公共的3天滚动均值,避免重复计算提升效率,后续直接循环累加不同移位步长的结果即可,移位次数修改shift_total参数即可,70次直接改成70:

import pandas as pd

# 原始数据构建逻辑不变
df = pd.DataFrame({
   'date': ['2021-01-01','2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05','2021-01-06','2021-01-07','2021-01-08','2021-01-09','2021-01-10'],
   'value': [10,20,20,30,20,10,30,20,10,20]
})
df.date = pd.to_datetime(df.loc[:, 'date'], format='%Y-%m-%d')
df.set_index('date',inplace=True)

# 提前计算公共的3天滚动均值,仅计算1次
rolling_mean = df.rolling(3).mean().round().fillna(0)

# 定义总移位次数,示例为5次,70次直接修改为70即可
shift_total = 5
# 初始化结果为全0
df_all = pd.DataFrame(0, index=df.index, columns=df.columns)

# 循环累加各次移位结果
for step in range(1, shift_total + 1):
    df_all += rolling_mean.shift(step).fillna(0)

方案2:向量化实现(更适合大数据量场景,效率更高)

你的需求本质是对滚动均值序列做长度为shift_total的滑动求和,可直接用pandas内置滚动求和实现,无需Python层循环,内部C语言优化执行速度更快:

# 接上面的rolling_mean计算逻辑
shift_total = 5
df_all = rolling_mean.shift(1).rolling(shift_total, min_periods=1).sum().fillna(0)

两种方案输出结果和你预期的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:57:02