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

如何高效基于pandas DataFrame某列30天滚动均值生成新列?

高效实现滚动均值方案

你的循环方案效率低的核心原因是逐行遍历计算,而pandas内置的rolling方法是矢量化实现,底层用C优化,能大幅提升计算速度,同时完美处理边界情况。

匹配原逻辑的实现

你的代码逻辑是:每行存储从当前行开始往后30天(含当前行)的成交量均值,仅当后续有足够30条数据时计算,否则留空NaN。对应代码:

import pandas as pd

# 计算窗口大小30的滚动均值,然后平移29位匹配原逻辑
DF['mean_a_volume'] = DF['a_volume'].rolling(window=30, min_periods=30).mean().shift(-29)

关键参数说明

  • window=30:指定滚动窗口包含30条数据
  • min_periods=30:要求窗口内必须有30条有效数据才计算均值,否则返回NaN,自动处理最后29行的边界情况
  • .shift(-29):默认rolling.mean()是计算当前行及之前29行的均值(窗口结束于当前行),平移-29位后,就把"当前行到后29行"的均值放到当前行,和你的循环逻辑完全一致

常见股票场景优化(如果需求是"过去30天均值")

如果你的实际需求是当前行及之前29天的历史成交量均值(股票分析更常用的逻辑),不需要平移,直接用:

DF['mean_a_volume'] = DF['a_volume'].rolling(window=30, min_periods=30).mean()

此时前29行因数据不足会返回NaN,从第30条数据开始正常计算均值。

为什么比你的方案高效

  • 避免了循环中的多次切片和逐行赋值,矢量化操作的时间复杂度远低于O(n)级别的循环
  • 底层依赖pandas/NumPy的C扩展实现,计算速度是纯Python循环的几十到上百倍,数据量越大优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:20:30