熊猫:如何用之前的非空值和下一个非空值的平均值填写不适用数据

时间:2017-10-08 08:09:32

标签: python pandas data-science

我的数据框中有一些N / A值

df = pd.DataFrame({'A':[1,1,1,3],
              'B':[1,1,1,3],
              'C':[1,np.nan,3,5],
              'D':[2,np.nan, np.nan, 6]})
print(df)

    A   B   C   D
0   1   1   1.0 2.0
1   1   1   NaN NaN
2   1   1   3.0 NaN
3   3   3   5.0 6.0

如何用其先前非空值的平均值和其列中的下一个非空值填写n / a值? 例如,C列中的第二个值应填入(1 + 3)/ 2 = 2

期望的输出:

    A   B   C   D
0   1   1   1.0 2.0
1   1   1   2.0 4.0
2   1   1   3.0 4.0
3   3   3   5.0 6.0

谢谢!

1 个答案:

答案 0 :(得分:3)

使用ffillbfill通过前向和后方填充替换NaN,然后使用汇总groupby的索引concatmean

df1 = pd.concat([df.ffill(), df.bfill()]).groupby(level=0).mean()
print (df1)
   A  B    C    D
0  1  1  1.0  2.0
1  1  1  2.0  4.0
2  1  1  3.0  4.0
3  3  3  5.0  6.0

详情:

print (df.ffill())
   A  B    C    D
0  1  1  1.0  2.0
1  1  1  1.0  2.0
2  1  1  3.0  2.0
3  3  3  5.0  6.0

print (df.bfill())
   A  B    C    D
0  1  1  1.0  2.0
1  1  1  3.0  6.0
2  1  1  3.0  6.0
3  3  3  5.0  6.0