如何根据该列中每个 class 的平均值填充 pandas 中每一列的 nan 值

How to fill nan values of each column in pandas with respect to the average of each class in that column

我在 pandas 中有一个数据集(比如两个 class)。

 index | length | weight | label 
-------|--------|--------|-------
   0       1         2       0
   1       2         3       0
   2      nan        4       0
   3       6        nan      0
   4       30        40      1
   5       45        35      1
   6       18       nan      1

df.fillna(df.mean()) returns 一个数据帧,每个 nan 由每一列填充。但我想用其 class 的平均值填充每一列中的每个 nan,因此索引 2 处的长度为 3。输出如下所示:

 index | length | weight | label 
-------|--------|--------|-------
   0       1         2       0
   1       2         3       0
   2       3         4       0
   3       6         3       0
   4       30        40      1
   5       45        35      1
   6       18       37.5     1

有简单的功能还是自己实现?

GroupBy.transformmean 一起用于助手 Dataframe,每个组均值并传递给 fillna:

df = df.fillna(df.groupby('label').transform('mean')) 
print (df)
   length  weight  label
0     1.0     2.0      0
1     2.0     3.0      0
2     3.0     4.0      0
3     6.0     3.0      0
4    30.0    40.0      1
5    45.0    35.0      1
6    18.0    37.5      1 

详情:

print (df.groupby('label').transform('mean'))
   length  weight
0     3.0     3.0
1     3.0     3.0
2     3.0     3.0
3     3.0     3.0
4    31.0    37.5
5    31.0    37.5
6    31.0    37.5