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

pandas Categorical列groupby.size统计多余0值是否正常?如何解决

行为逻辑说明

当你使用pd.Categorical设置字段为分类类型时,pandas的groupby操作默认会对所有分类字段的预定义类别做笛卡尔积展开,即使部分类别组合在原始数据中从未出现,也会保留在分组结果中,对应不存在的组合计数返回0,这就是你看到大量0值无效行的原因。
你的示例中city的分类为['Loa', 'Porto'],town的分类为['A','B','C'],默认分组时会生成2*3=6组全量组合,才会出现Loa+A、Loa+B、Porto+C这类无数据的分组。

无需修改字段类型的解决方法

直接在groupby中传入参数observed=True即可,该参数会强制分组操作仅统计原始数据中实际存在的类别组合,自动过滤掉无数据的0值分组。
对应代码如下:

# 仅需新增observed=True参数,不需要修改原有字段的Categorical类型
mydf.groupby(['city','town'], observed=True).size().to_frame()

运行后返回的结果完全符合预期:

0
city  town     
Loa   C     2
Porto A     2
      B     1

注:observed参数从pandas 1.1.0版本开始正式支持,默认值为False,即对分类类型字段默认枚举全量类别组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:51:21