我有以下数据框:
A label
0 1.0 a
1 2.0 a
2 3.0 a
3 NaN a
4 NaN a
5 NaN a
6 9.0 a
7 8.0 a
8 7.0 a
9 NaN a
10 NaN a
11 21.0 a
12 32.0 a
13 12.0 a
我要在A列中填充nan值,如下所示:
填充索引3,4和5的空值:通过取索引2和6的平均值,即(3 + 9)/ 2。
填充索引9和10的空值:取索引8和11的平均值,即(7 + 21)/ 2。
并且对于数据框中的所有其他空值,如果发生的话,类似。 我花了很多时间思考精确的解决方案,但是找不到。我怎样才能做到这一点?
答案 0 :(得分:1)
使用缺失值的前填充,添加misisng值的后填充,最后用2
除以平均值:
df['A'] = df.A.ffill().add(df.A.bfill()).div(2)
print (df)
A label
0 1.0 a
1 2.0 a
2 3.0 a
3 6.0 a
4 6.0 a
5 6.0 a
6 9.0 a
7 8.0 a
8 7.0 a
9 14.0 a
10 14.0 a
11 21.0 a
12 32.0 a
13 12.0 a
详细信息:
print (df.assign(ffill = df.A.ffill(),
bfill = df.A.bfill(),
both = df.A.ffill().add(df.A.bfill()),
fin = df.A.ffill().add(df.A.bfill()).div(2)))
A label ffill bfill both fin
0 1.0 a 1.0 1.0 2.0 1.0
1 2.0 a 2.0 2.0 4.0 2.0
2 3.0 a 3.0 3.0 6.0 3.0
3 NaN a 3.0 9.0 12.0 6.0
4 NaN a 3.0 9.0 12.0 6.0
5 NaN a 3.0 9.0 12.0 6.0
6 9.0 a 9.0 9.0 18.0 9.0
7 8.0 a 8.0 8.0 16.0 8.0
8 7.0 a 7.0 7.0 14.0 7.0
9 NaN a 7.0 21.0 28.0 14.0
10 NaN a 7.0 21.0 28.0 14.0
11 21.0 a 21.0 21.0 42.0 21.0
12 32.0 a 32.0 32.0 64.0 32.0
13 12.0 a 12.0 12.0 24.0 12.0