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

如何为DataFrame添加仅含rolling window的列用于后续分析?

给DataFrame添加滚动窗口列的实现方法

直接存储Rolling对象(你的代码逻辑)

你写的代码本身是可以运行的,它会把pandas.core.window.rolling.Rolling对象直接存入新列:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({"Close": range(100)})
df["rolling_20"] = df["Close"].rolling(20)

后续要使用窗口时,你可以对该列的每个对象调用方法,比如计算均值:

df["rolling_mean"] = df["rolling_20"].apply(lambda win: win.mean())

不过这种方式会重复触发窗口计算,效率不算高,适合简单的小数据场景。

存储窗口实际数据切片

如果你的核心需求是拿到每个位置对应的窗口内的原始数据(比如第20行对应的前20条Close值),可以用apply把窗口转成列表存入列:

df["window_data"] = df["Close"].rolling(20).apply(lambda x: x.tolist(), raw=True)

这样window_data列的每个元素都是对应窗口的数值列表(前19行窗口不满,会显示NaN),后续直接对列表做自定义分析即可,比如计算窗口的极差:

df["window_range"] = df["window_data"].apply(lambda lst: max(lst) - min(lst) if pd.notna(lst) else None)

关键注意点

  • 存Rolling对象时,列里的元素是对象引用,查看DataFrame时看不到具体窗口数据,必须调用方法才能获取计算结果。
  • 存窗口数据切片会占用更多内存,因为每行都要存一个列表,适合数据量不大的场景。
  • 大数据集下,更建议直接在需要分析时调用rolling方法,避免额外内存消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:12:48