You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多列分组:Categorical类型与数值类型结果差异原因

问题解答

差异原因

当Series列是数值类型时,groupby只会基于数据中实际存在的(Series, Name)组合进行分组计数,因此只返回有对应数据的行,不会出现计数为0的情况。

而当Series列是Categorical(分类)类型时,分类类型的核心特性是拥有预定义的类别集合(哪怕部分类别在数据中没有实际出现)。pandas对分类列分组时,默认会遍历该列的所有类别,再和Name列的所有唯一值生成笛卡尔积组合,对每个组合计数——不存在的组合自然会得到0值,同时结果会按分类类别和姓名的字母顺序排序。

解决方法

如果希望分类列分组时和数值列行为一致,只返回实际存在的组合,可以在groupby中添加observed=True参数:

df.groupby(['Series','Name'], observed=True)['Name'].count()

执行后就会和数值类型分组的结果完全一致,不会出现计数为0的行。


原始数据表格

季数姓名
1David
1Edward
1Jasmine
2Lea
2Jonathan
2Louise

数值类型分组结果

季数姓名计数
1David1
1Edward1
1Jasmine1
2Lea1
2Jonathan1
2Louise1

分类类型默认分组结果

季数姓名计数
1David1
2David0
1Edward1
2Edward0
1Jasmine1
2Jasmine0
1Jonathan0
2Jonathan1
1Lea0
2Lea1
1Louise0
2Louise1

内容的提问来源于stack exchange,提问作者Lordchimichanga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:25:19