2017-10-08 52 views
2

的平均值,我有一些N /在我的数据框的值熊猫:我如何填写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值中,其前一个非空值的平均值和其列中的下一个非空值?

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 

感谢: 例如,在列C中的第二个值应当以(1 + 3)/ 2 = 2

所需的输出填充!

回答

2

使用ffillbfill用于通过前进和后退充填,然后concatgroupby通过索引与骨料mean替换NaN S:

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 
+2

这样一个很好的逻辑。 +1 – Dark