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

Pandas如何计算周数据对比前4周滚动均值的变化率

Pandas 单周数据对比前序4周滚动均值变化率计算方案

核心错误原因

你之前用shift()未得到正确结果的核心原因是偏移方向参数写反:要取当前行的上一行的滚动均值,需要传入正偏移量,负偏移量会取到下一行的值,完全匹配错计算基准。

偏移参数规则

shift()步长逻辑非常明确:

  • 传入正整数n:整列向下平移n行,当前行位置会取到原列中n行之前的历史值
  • 传入负整数-n:整列向上平移n行,当前行位置会取到原列中n行之后的未来值

正确实现代码

假设存储单周原始数据的列名为week_val(替换为你自己的实际列名即可),直接按如下逻辑计算:

import pandas as pd
import numpy as np

# 第一步:你已经完成的4周滚动均值计算,这部分不需要改
df['rolling_mean_fourweeks'] = df.rolling(4).mean().round(decimals=1)

# 第二步:计算变化率,shift(1)取上一行的滚动均值作为计算基准
df['week_change_rate'] = (df['week_val'] / df['rolling_mean_fourweeks'].shift(1) - 1).round(2)

# 可选:转换为百分比文本格式
df['week_change_rate_pct'] = df['week_change_rate'].apply(lambda x: f"{x*100:.0f}%" if pd.notna(x) else np.nan)

结果匹配校验

按上述代码计算的结果完全符合你的预期:

  • 周序号3(即第4周):上一行是第3周,滚动窗口不足4个,rolling_mean_fourweeks值为NaN,因此变化率计算结果为NaN
  • 周序号4(即第5周):上一行是第4周,对应第一个有效的4周滚动均值,代入计算即可得到约47%的正确结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:48:53