如何对Pandas滚动窗口DataFrame执行i/10权重的移动加权计算
实现方法
直接结合rolling.apply与预定义权重数组即可完成需求,具体实现如下:
- 预定义长度为10的权重数组,元素依次为
1/10到10/10,和窗口内每个位置的权重一一对应 - 对
Values列开启大小为10的滚动窗口,每个窗口内的元素和权重逐位相乘求和,即可得到对应位置的加权结果,前9个位置自动返回空值NaN
完整代码示例:
import pandas as pd import numpy as np # 构造示例DataFrame values = [4,6,4,8,13,20,2,4,3,6,5,8,2,5,7, 20, 5, 6 , 7, 9, 20 , 5, 3, 5, 20, 4, 10, 2] example = pd.DataFrame({'Values' : values}) # 定义匹配窗口位置的权重 weights = np.arange(1, 11) / 10 # 执行滚动加权计算 example['weighted_result'] = example['Values'].rolling(10).apply(lambda window: (window * weights).sum()) # 输出验证结果 print(example)
计算结果验证:第10个位置(索引为9,从0开始计数)的输出为37.8,和你给出的手动计算结果完全一致,后续位置的计算逻辑也符合要求。
内容的提问来源于stack exchange,提问作者SeanLeCornu
相关产品推荐
相关产品推荐

