如何为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
相关产品推荐
相关产品推荐

