pandas数据过滤后groupby仍返回全部分组原因咨询
问题产生原因
- 核心诱因是
temp中的col1或col13列为分类(Categorical)数据类型,pandas的groupby方法针对分类列默认使用observed=False参数,会返回分类定义中所有取值的笛卡尔积作为分组,哪怕对应分组在实际筛选后的数据中不存在,不存在的分组聚合结果就会显示为NaN。 - 仅按
col1分组功能正常的原因:你执行的筛选逻辑已经把col1的取值固定为'a',如果col1本身是普通的字符串/数值类型而非分类类型,groupby默认仅统计数据中实际存在的取值,就不会出现多余的空分组。
验证方法
执行如下代码查看两列的数据类型,若输出为category即可确认是该问题:
print(temp[['col1', 'col13']].dtypes)
解决方案
方法1:修改groupby参数
在分组时指定observed=True,仅统计数据中实际存在的分组:
temp.groupby(['col1', 'col13'], observed=True)['Flag'].mean()
方法2:转换列类型
如果不需要保留分类属性,可以将分类列转换为普通的数值/字符串类型:
# 示例为将col13转为int类型,可根据实际场景调整目标类型 temp['col13'] = temp['col13'].astype(int) # 转换后再执行原聚合逻辑即可得到正常结果 temp.groupby(['col1', 'col13'])['Flag'].mean()
内容的提问来源于stack exchange,提问作者SteveS
相关产品推荐
相关产品推荐

