Pandas 0.25.0分类列GroupBy行为异常问题咨询
Pandas 0.25.0分组分类变量时出现意外NaN行的说明
这不是Bug,而是Pandas 0.25.0版本中有意调整的默认行为,你没遗漏什么——只是版本间的行为变更可能没在你关注的发布说明部分明确标注而已。
行为变更的背景
在Pandas 0.24.1及更早版本中,当分组包含分类(category)类型的列时,默认只会返回数据中实际存在的分组组合,等价于显式设置observed=True的效果。
但从0.25.0开始,官方调整了这个逻辑:对于包含分类变量的分组,默认会返回该分类变量所有可能的类别组合(哪怕原数据中不存在这个组合),对应的值会填充为NaN。这个调整的原因是,分类变量的核心特性就是拥有固定的预定义类别集合,分组时展示所有类别更贴合分类变量的语义。
如何适配或恢复旧行为
如果你需要和旧版本完全一致的结果,只需要在groupby中显式添加observed=True参数即可:
df.groupby(['A', 'B'], observed=True).agg({'C': 'sum'})
执行后就会得到你预期的3行结果,不会出现不存在的b m组合。
如果你的业务场景需要保留新的默认行为(展示所有分类组合),那么不需要做任何额外修改。
内容的提问来源于stack exchange,提问作者michel404
相关产品推荐
相关产品推荐

