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

如何从Pandas ExponentialMovingWindow中提取底层列表/数组?

如何从Pandas ExponentialMovingWindow中提取底层列表或数组?

首先要明确:ExponentialMovingWindow(EWM)对象本身并不直接存储完整的底层窗口数据集合,它是一个延迟计算的对象,仅在调用mean()、sum()这类统计方法时才会执行加权计算并返回结果。

可行的解决方法

1. 获取EWM统计结果的数组/列表

如果你需要的是EWM计算后的统计值(比如均值、求和结果),直接调用对应的方法后,通过to_numpy()或tolist()转换即可:

import pandas as pd

# 示例数据
df = pd.Series([1, 2, 3, 4, 5])
alpha = 0.5

# 创建EWM对象
ewm_window = df.ewm(alpha=alpha)

# 获取EWM均值的数组
ewm_mean_array = ewm_window.mean().to_numpy()
# 转成列表
ewm_mean_list = ewm_mean_array.tolist()

print(ewm_mean_array)  # 输出: [1.         1.66666667 2.44444444 3.2962963  4.16666667]
print(ewm_mean_list)   # 输出: [1.0, 1.6666666666666667, 2.4444444444444446, 3.2962962962962963, 4.166666666666667]

2. 关于"底层原始窗口数据"的说明

EWM的核心是递归加权计算,默认会纳入所有历史数据(除非通过span、com等参数间接限制有效窗口范围),它不会像普通rolling()窗口那样存储每个窗口内的原始数据。如果确实需要获取固定窗口的原始数据,应该使用df.rolling(window_size),再通过apply()提取窗口数据:

# 示例:获取大小为3的滑动窗口原始数据数组
rolling_window = df.rolling(window=3)
window_arrays = rolling_window.apply(lambda x: x.to_numpy(), raw=False).tolist()

print(window_arrays)  # 输出: [nan, nan, array([1, 2, 3]), array([2, 3, 4]), array([3, 4, 5])]

为什么window.getattr('array')不可行?

ExponentialMovingWindow类并没有暴露名为array的属性,它的设计逻辑是按需计算统计量,而非存储窗口数据,所以直接通过getattr获取底层数组的方式不成立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:04:59