Python 3.x 通过两个值的平均值填充nan
我有以下数据帧:Python 3.x 通过两个值的平均值填充nan,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有以下数据帧: 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值,
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
对于数据帧中的所有其他空值,如果发生,也是如此。
我花了很多时间思考精确的解决方案,但找不到。我该怎么做 使用缺失值的正向填充,添加misng值的反向填充,最后除以
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