2017-10-08 14 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