Python 带更新的滚动平均值
以dataframe为例:Python 带更新的滚动平均值,python,pandas,dataframe,Python,Pandas,Dataframe,以dataframe为例: df = pd.DataFrame({ "a": [None, None, None, None, 1, 2, -1, 0, 1], "b": [5, 4, 6, 7, None, None, None, None, None] }) >> a b 0 NaN 5.0 1 NaN 4.0 2 NaN 6.0 3 NaN 7.0 4 1.0 NaN 5 2.0 NaN 6 -1.0 NaN 7
df = pd.DataFrame({
"a": [None, None, None, None, 1, 2, -1, 0, 1],
"b": [5, 4, 6, 7, None, None, None, None, None]
})
>> a b
0 NaN 5.0
1 NaN 4.0
2 NaN 6.0
3 NaN 7.0
4 1.0 NaN
5 2.0 NaN
6 -1.0 NaN
7 0.0 NaN
8 1.0 NaN
对于b中的每个缺失值,我想取前4个值的平均值加上a中具有相同索引的值。例如,在7之后:
4: (5 + 4 + 6 + 7) / 4 + 1 = 6.5
5: (6.5 + 4 + 6 + 7) / 4 + 2 = 7.88
...
结果数据帧应为:
>> a b
0 NaN 5.00
1 NaN 4.00
2 NaN 6.00
3 NaN 7.00
4 1.0 6.50
5 2.0 7.88
6 -1.0 5.84
7 0.0 6.80
8 1.0 7.76
如何实现这一点?在这里使用for循环,panda不是按行的,他们不能在将来的计算中使用以前的计算值。(矢量化)
l=[]
对于zip中的x,y(*df.values.T.tolist()):
如果len(l)部分“加上a中具有相同索引的值”,则没有真正意义。我看不到a的值在平均值中,但它在平均值中denominator@d_kennetz这不是分母。我明白了,这是最后一个4+值的平均值!你可以查一下你的名字。。。犯错误W-B.WenB+1.
l=[]
for x ,y in zip(*df.values.T.tolist()):
if len(l)<4:
l.append(y)
else:
l.append(sum(l[-4:])/4+x)
l
Out[188]: [5.0, 4.0, 6.0, 7.0, 6.5, 7.875, 5.84375, 6.8046875, 7.755859375]
df.b=l
df
Out[190]:
a b
0 NaN 5.000000
1 NaN 4.000000
2 NaN 6.000000
3 NaN 7.000000
4 1.0 6.500000
5 2.0 7.875000
6 -1.0 5.843750
7 0.0 6.804688
8 1.0 7.755859