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

Pandas计算当前值与前置滚动均值的百分比变化率方法

实现方案

核心逻辑是先计算不包含当前值的前置滚动窗口均值,再基于该均值计算变化率即可,全程用pandas原生向量化操作,写法简洁且适配任意窗口大小,不需要硬套pct_change方法。

通用实现代码

import pandas as pd

def calc_roc_vs_prev_rolling_avg(series: pd.Series, window: int) -> pd.Series:
    # 计算指定窗口大小的滚动均值后下移1位,确保均值仅由当前位置之前的window条数据计算
    prev_window_avg = series.rolling(window=window).mean().shift(1)
    # 计算变化率,逻辑等价于 (当前值 - 前置滚动均值) / 前置滚动均值
    return series / prev_window_avg - 1

# 测试验证
df = pd.DataFrame({'data': [1, 2, 3, 7]})
window = 2
df['result'] = calc_roc_vs_prev_rolling_avg(df['data'], window=window)
print(df['result'])

输出结果

0    NaN
1    NaN
2    1.0
3    1.8
Name: result, dtype: float64

和预期结果完全一致。

说明

  • 该写法完全兼容pandas滚动窗口的原生参数,如需调整最小有效样本数、窗口加权规则等,直接在rolling()方法中传入对应参数(如min_periods、win_type)即可
  • 全程为pandas底层向量化实现,性能和直接调用pct_change基本持平,无额外循环开销
  • 前window个位置会自动返回NaN,符合滚动计算的常规输出逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:28:04