大熊猫数据框以两个值的平均值填充nan

时间:2020-04-17 07:45:19

标签: 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值,如下所示:

填充索引3,4和5的空值:通过取索引2和6的平均值,即(3 + 9)/ 2。

填充索引9和10的空值:取索引8和11的平均值,即(7 + 21)/ 2。

并且对于数据框中的所有其他空值,如果发生的话,类似。 我花了很多时间思考精确的解决方案,但是找不到。我怎样才能做到这一点?

1 个答案:

答案 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