如何在Pandas中使用groupby删除分组内计数为0的空类别?
解决方案
一、过滤已生成的结果
如果已经执行了groupby().size()得到包含0计数的结果,直接通过布尔索引过滤即可:
result = df.groupby(['Year', 'mycat']).size() filtered_result = result[result != 0]
执行后输出:
Year mycat 2019 A 2 B 1 2020 B 1 dtype: int64
二、groupby阶段直接避免生成0计数行
出现0计数行的核心原因是mycat被设置为category类型,groupby默认会枚举该字段的所有类别,哪怕对应分组中没有该类别的数据。可以通过以下两种方式解决:
1. 给groupby添加observed=True参数
该参数会让groupby只保留实际存在的类别组合,跳过无数据的类别:
df.groupby(['Year', 'mycat'], observed=True).size()
2. 将category类型转为普通字符串
如果不需要保留category类型,先转换字段类型再执行groupby:
df['mycat'] = df['mycat'].astype(str) df.groupby(['Year', 'mycat']).size()
以上两种方式都会直接生成不含0计数行的结果,无需后续手动修改。
内容的提问来源于stack exchange,提问作者buhtz
相关产品推荐
相关产品推荐

