我正在尝试对两列进行基于窗口的加权平均值
例如,如果我有值列“a”和权重列“b”
a b
1: 1 2
2: 2 3
3: 3 4
尾随窗口为 2(尽管 id 喜欢使用可变窗口长度)
我的第三个加权平均列应该是“c”,其中没有足够的先前数据进行完整加权平均的行是 nan
c
1: nan
2: (1 * 2 + 2 * 3) / (2 + 3) = 1.8
3: (2 * 3 + 3 * 4) / (3 + 4) = 2.57
最佳答案
对于窗口为 2 的特定情况,您可以使用 prod
和 shift
s = df.prod(1)
(s + s.shift()) / (df.b + df.b.shift())
Out[189]:
1 NaN
2 1.600000
3 2.571429
dtype: float64
在示例df2
上:
a b
0 73.78 51.46
1 73.79 27.84
2 73.79 34.35
s = df2.prod(1)
(s + s.shift()) / (df2.b + df2.b.shift())
Out[193]:
0 NaN
1 73.783511
2 73.790000
dtype: float64
<小时/>
此方法仍然适用于可变窗口长度。对于可变窗口长度,您需要额外的 listcomp 和 sum
尝试上面的示例 df2
s = df2.prod(1)
m = 2 #window length 2
sum([s.shift(x) for x in range(m)]) / sum([df2.b.shift(x) for x in range(m)])
Out[214]:
0 NaN
1 73.783511
2 73.790000
dtype: float64
窗口长度为 3
m = 3 #window length 3
sum([s.shift(x) for x in range(m)]) / sum([df2.b.shift(x) for x in range(m)])
Out[215]:
0 NaN
1 NaN
2 73.785472
dtype: float64
关于python - pandas 中基于窗口的加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59296434/