Pandas - 对特定类别使用平均值填充fillna

5

我想使用同一类别缺失值所在的列的均值来填充缺失值

data = {'Class': ['Superlight', 'Aero', 'Aero', 'Superlight', 'Superlight', 'Superlight', 'Aero', 'Aero'],
        'Weight': [5.6, 8.6, np.nan, 5.9, 5.65, np.nan, 8.1, 8.4]}


    Class   Weight
0   Superlight     5.60
1   Aero           8.60
2   Aero           NaN
3   Superlight     5.90
4   Superlight     5.65
5   Superlight     NaN
6   Aero           8.10
7   Aero           8.40

我知道我可以做:

df.Weight.fillna(df.Weight.mean())

但是这将用整列的平均值填补缺失值。

以下代码将使用 AERO 类别的平均值替换 null 值(比第一种方法更好,但仍需要针对每个类别/分类单独处理)

df.Weight.fillna(df[df.Class == 'Aero'].Weight.mean())

是否可能将其抽象化,使它自动获取当前行的类别并找到该类别中的值的平均值,并替换它,而不是硬编码类别值?希望这样说有意义。

2个回答

10

groupby + transform并填充:

df['Weight'].fillna(df.groupby("Class")['Weight'].transform("mean"))

0    5.600000
1    8.600000
2    8.366667
3    5.900000
4    5.650000
5    5.716667
6    8.100000
7    8.400000
Name: Weight, dtype: float64

4
也许你可以尝试使用 groupbyapply 对每个分组进行操作:
df.groupby('Class')['Weight'].apply(lambda g: g.fillna(g.mean()))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接