Python如何计算移动平均值_Pandas实现滚动窗口函数应用

张开发
2026/4/15 0:47:46 15 分钟阅读

分享文章

Python如何计算移动平均值_Pandas实现滚动窗口函数应用
rolling()默认右对齐前N?1行不足时返回NaN需中心对齐用centerTrue时间序列优先用rolling(5D)min_periods1可首行出值但掩盖稀疏问题apply()须返回标量推荐lambda x: x.quantile(0.5)skipna默认Truemin_periods控制有效值下限多列直接df.rolling(5).mean()自动广播。用 rolling() 计算移动平均前先确认窗口对齐方式移动平均不是简单取前 N 个数求均值——rolling() 默认是“右对齐”窗口即当前行参与计算时只包含它和前面的 N?1 行。如果你要的是“中心对齐”比如做平滑曲线得显式加 centerTrue 参数。常见错误现象df[price].rolling(5).mean() 返回前 4 行全是 NaN不是 bug是设计如此有人误以为数据丢了其实是窗口没凑够 5 个值。时间序列场景下若索引是 DatetimeIndex建议优先用 rolling(5D) 这类时间偏移写法比固定整数窗口更鲁棒min_periods 参数很关键设为 1 可让首行就出值用单个数均值但会掩盖数据稀疏问题整数窗口在非等距索引上可能产生意外截断比如跳过某天缺失后实际参与计算的行数少于预期rolling().apply() 自定义函数要注意返回标量想算中位数、分位数或带条件的均值可以传函数进去但 rolling().apply() 要求函数必须返回单个标量值否则报错 ValueError: Must produce aggregated value。典型翻车点用 np.mean(x) 没问题但写成 np.array(x).mean() 或忘了 axis0在某些 pandas 版本里可能返回 array 而非 float。立即学习“Python免费学习笔记深入”推荐始终用 lambda x: x.quantile(0.5) 而非 np.median后者不保证输入是 1D Series自定义函数里避免调用 len(x) 判空——x 是 Series应改用 x.notna().sum() 统计有效值性能敏感时别在里面写循环rolling().apply() 本身不向量化比原生 .mean() 慢 10 倍以上处理含 NaN 的列时rolling 默认跳过它们pandas 的 rolling 在计算时默认忽略 NaN等价于 skipnaTrue这跟 NumPy 的 np.nanmean 一致但容易引发误解比如窗口内有 3 个数 2 个 NaN结果是那 3 个数的均值不是 NaN。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章