熊猫:用“ n”列中平均值最接近的非空值替换NaN

贾吉里·曼杰拉(Jagiri Manjeera)

假设我有以下数据框。

     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用于用NaNs替换最近的s,mean并向前填充最后一组NaNs,然后对第一组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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章