我有一个数据集将一些看起来像这样的缺失数据:

id    category     value
1     A            NaN
2     B            NaN
3     A            10.5
4     C            NaN
5     A            2.0
6     B            1.0

我需要填写null才能在模型中使用数据。类别第一次出现时为NULL。我想做的方法是针对类别AB这样的情况,这些案例具有多个值,将空值替换为该类别的平均值。对于仅出现一次的C类,只需填写其余数据的平均值即可。

我知道我可以简单地针对诸如C这样的情况来获取所有行的平均值,但是我一直在尝试对A和B进行按类别的方式并替换空值。
df['value'] = df['value'].fillna(df['value'].mean())

我需要最终的df像这样
id    category     value
1     A            6.25
2     B            1.0
3     A            10.5
4     C            4.15
5     A            2.0
6     B            1.0

最佳答案

我认为您可以将 groupby apply fillna mean 一起使用。如果某个类别仅具有NaN值,则获取NaN,因此请使用列中所有值的 mean 来填充NaN:

df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean()))
df.value = df.value.fillna(df.value.mean())
print (df)
   id category  value
0   1        A   6.25
1   2        B   1.00
2   3        A  10.50
3   4        C   4.15
4   5        A   2.00
5   6        B   1.00

关于python - Pandas :如何用groupby的平均值填充空值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40299055/

10-12 18:41