假设我有以下数据框。
A B
0 NaN 12
1 NaN NaN
2 24 NaN
3 NaN NaN
4 NaN 13
5 NaN 11
6 NaN 13
7 18 NaN
8 19 NaN
9 17 NaN
在“ A”列中,如果缺失值存在,则需要用序列中的3个最近的非空值的平均值代替。
例如,索引5的NaN的最接近的非空值为18,而在18之后的下两个值也不为空。因此,索引为5的NaN被(18 + 19 + 17)/ 3代替。索引4
的NaN具有24作为其最接近的非空值,但24之前的两个值非空。因此,索引4的NaN不会替换为任何值。同样,其余列也需要完成此操作。有人知道这样做的矢量化方式吗?谢谢!
我相信您需要将滚动与mean
从后滚动到滚动相结合,然后DataFrame.interpolate
用于用NaN
s替换最近的s,mean
并向前填充最后一组NaN
s,然后对第一组NaN进行回填,以用于辅助DataFrame c
,用于替换原始DataFrame的缺失值:
a = df.rolling(3).mean()
b = df.iloc[::-1].rolling(3).mean()
c = a.fillna(b).fillna(df).interpolate(method='nearest').ffill().bfill()
print (c)
A B
0 24.0 12.000000
1 24.0 12.000000
2 24.0 12.000000
3 24.0 12.333333
4 24.0 12.333333
5 18.0 11.000000
6 18.0 12.333333
7 18.0 12.333333
8 19.0 12.333333
9 18.0 12.333333
df = df.fillna(c)
print (df)
A B
0 24.0 12.000000
1 24.0 12.000000
2 24.0 12.000000
3 24.0 12.333333
4 24.0 13.000000
5 18.0 11.000000
6 18.0 13.000000
7 18.0 12.333333
8 19.0 12.333333
9 17.0 12.333333
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句