我的数据框中有一些 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
谢谢!
最佳答案
使用ffill
和bfill
正向和反向填充替换NaN
,然后concat
和 groupby
按索引聚合 mean
:
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
关于python - Pandas:如何用前一个非空值和下一个非空值的平均值填写 n/a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46628892/