发布
社区首页 >问答首页 >Pandas:如何用groupby的均值填充空值?

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

Stack Overflow用户
提问于 2016-10-28 14:12:11
回答 2查看 13.5K关注 0票数 11

我有一个数据集,其中包含一些丢失的数据,如下所示:

代码语言:javascript
代码运行次数:0
复制
id    category     value
1     A            NaN
2     B            NaN
3     A            10.5
4     C            NaN
5     A            2.0
6     B            1.0

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

我知道,对于像C这样的情况,我可以简单地这样做,以获得所有行的平均值,但我在尝试对A和B进行分类平均并替换空值时遇到了困难。

代码语言:javascript
代码运行次数:0
复制
df['value'] = df['value'].fillna(df['value'].mean()) 

我需要最终的df是这样的

代码语言:javascript
代码运行次数:0
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-28 14:15:18

我认为您可以将groupbyapply fillnamean一起使用。如果某个类别只有NaN值,则获取NaN,因此使用列的所有值的mean填充NaN

代码语言:javascript
代码运行次数:0
复制
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
票数 11
EN

Stack Overflow用户

发布于 2018-08-10 08:15:48

您还可以使用GroupBy + transform来使用NaN均值填充GroupWise值。这种方法避免了低效的apply + lambda。例如:

代码语言:javascript
代码运行次数:0
复制
df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40299055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档