使用特定类别的平均值填写

2024-10-01 22:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用该列的平均数填充na,但只针对与缺失值相同类别的代表

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类别的平均值替换空值(这更好,但仍然不好,因为我必须分别对每个类别/类别执行此操作)

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

是否可以对其进行抽象,以便自动获取当前行的类,并找到属于该类别的值的平均值,然后替换它,而无需对类值进行硬编码?希望这是有道理的


Tags: dfnp代表nanmean类别class平均值
2条回答

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

可能您可以使用groupbyapply对每个组进行尝试:

df.groupby('Class')['Weight'].apply(lambda g: g.fillna(g.mean()))

相关问题 更多 >

    热门问题