pandas分类字符串字段groupby分组产生多余组合如何避免
解决方案
你遇到的现象是pandas对分类类型列做分组的默认行为导致的,只需要在groupby方法中添加observed=True参数,即可在分组阶段直接过滤掉数据中不存在的组合,同时保留你设置的Cat列的分类排序规则:
df2 = df.groupby(['col1','Cat','col2'], observed=True)['val'].sum()
原理说明
- pandas的
groupby方法observed参数默认值为False,当分组键包含分类类型字段时,会自动生成所有分类值的笛卡尔积作为分组结果,不管实际数据中是否存在对应组合,这就是你得到27行结果的原因。 - 将
observed设置为True后,分组仅会保留实际数据中存在的组合,最终返回的结果行数和未设置分类时的8行一致,且排序会严格遵循你定义的['tb','tq','ta']分类顺序。
内容的提问来源于stack exchange,提问作者RealRageDontQuit
相关产品推荐
相关产品推荐

