Pandas:如何用groupby的平均值填充空值?

2024-04-25 09:23:10 发布

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

我有一个数据集会丢失一些如下所示的数据:

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

我需要填写空值才能在模型中使用数据。每次类别第一次出现时都为空。我想做的方法是,对于像categoryAB这样有多个值的情况,用该类别的平均值替换空值。对于只出现一次的类别C,只需填写其余数据的平均值。

我知道我可以简单地对像C这样的情况执行此操作来获得所有行的平均值,但是我一直在尝试对A和B执行categorywise方法并替换空值。

df['value'] = df['value'].fillna(df['value'].mean()) 

我需要最后的测向像这样

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

Tags: 数据方法模型iddfvalue情况nan
2条回答

我想你可以把^{}apply^{}^{}一起使用。如果某个类别只有NaN个值,则获取NaN,因此使用^{}列的所有值来填充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

您还可以使用GroupBy+transform以分组方式填充NaN值。这种方法避免了无效的apply+lambda。例如:

df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())

相关问题 更多 >