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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:06:03