分组求均值后用布尔索引触发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
相关产品推荐
相关产品推荐

