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

如何从pd.Series().rolling()对象中提取各窗口内的元素?

如何从Pandas Rolling对象中获取窗口列表

要从pd.Series(a).rolling(3)生成的对象中得到你预期的窗口列表,Pandas本身不会直接存储完整窗口集合,但可以通过以下两种方法实现:

方法1:利用apply捕获每个窗口

借助rolling.apply()自定义处理每个窗口,判断窗口是否填满,返回对应格式的列表:

import pandas as pd
import numpy as np

a = [1, 2, 3, 7, 9]
roll_obj = pd.Series(a).rolling(3)

def extract_window(window):
    # 窗口未填满时返回[nan]
    if window.isna().any():
        return [np.nan]
    return window.tolist()

window_list = roll_obj.apply(extract_window, raw=False).tolist()
print(window_list)
# 输出: [[nan], [nan], [1, 2, 3], [2, 3, 7], [3, 7, 9]]

这里raw=False确保每个窗口以Series形式传入函数,方便我们检测缺失值(对应窗口未填满的情况)。

方法2:手动生成窗口(性能更优)

如果处理大数据集,手动循环生成窗口可以避免apply的额外开销:

import numpy as np

a = [1, 2, 3, 7, 9]
window_size = 3
total_len = len(a)

window_list = []
for idx in range(total_len):
    if idx < window_size - 1:
        window_list.append([np.nan])
    else:
        # 截取对应区间的元素组成窗口
        window_list.append(a[idx - window_size + 1 : idx + 1])

print(window_list)
# 输出: [[nan], [nan], [1, 2, 3], [2, 3, 7], [3, 7, 9]]

需要注意的是,Pandas的Rolling对象是按需计算的,内部不会预先存储所有窗口的完整数据,所以需要通过上述方式主动提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:43:15