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

分组求均值后用布尔索引触发IndexingError,原因何在?

解决Pandas分组后筛选均值时的IndexingError问题

我对DataFrame per_school_summary按"School Type"分组并计算均值时,运行以下代码触发了报错:

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).

对应的代码:

type_passing_math = per_school_summary.groupby(["School Type"]).mean()[
    per_school_summary["Average Math Score"] >= 70
]

让我困惑的是,之前用类似语法筛选单条件的操作完全正常,比如筛选数学分数≥70的学校:

school_passing_math = school_data_complete[school_data_complete["math_score"] >= 70]

我尝试了几种修改写法,都没解决问题:

  • 尝试对列单独分组后比较,触发类型错误:
    type_passing_math = per_school_summary.groupby(["School Type"]).mean()[
        per_school_summary["Average Math Score"].groupby(["School Type"]) >= 70
    ]
    
    报错信息:
    TypeError: '>=' not supported between instances of 'SeriesGroupBy' and 'int'
    
  • 改用.loc索引,还是触发相同的IndexingError:
    type_passing_math = per_school_summary.groupby(["School Type"]).mean().loc[
        per_school_summary["Average Math Score"] >= 70
    ]
    

问题原因

分组计算均值后,新生成的DataFrame索引已经变成"School Type"的唯一值(比如不同的学校类型),而你用来筛选的布尔序列是基于原per_school_summary的行索引,两者的索引结构、长度完全不匹配,导致无法对齐筛选。

正确解法

先完成分组求均值的操作,得到汇总后的DataFrame,再针对汇总表里的"Average Math Score"列做筛选:

# 先得到分组均值汇总表
grouped_mean = per_school_summary.groupby(["School Type"]).mean()
# 对汇总表的目标列筛选
type_passing_math = grouped_mean[grouped_mean["Average Math Score"] >= 70]

也可以合并成一行代码,用query方法更简洁(列名含空格时需要用反引号包裹):

type_passing_math = per_school_summary.groupby(["School Type"]).mean().query("`Average Math Score` >= 70")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:35:20