pandas统计多列值均为Yes的行数报多维键索引错误如何解决
错误原因
触发Cannot index with multidimensional key报错的核心原因有两点:
- 你的DataFrame存在重复列名:给出的表结构里有2个同名的
First name列、2个同名的Parameter 1列,不存在名为Parameter 2的列。当存在重复列名时,用df.列名的属性访问方式取列,pandas会返回包含所有同名列的子DataFrame而非单列Series,此时做布尔索引就会传入多维键,直接触发报错。 - 列名引用方式错误:你的列名是带空格的
Parameter 1,代码里写的df.Parameter1本身就和实际列名不匹配,进一步放大了索引问题。
解决方案
方法1:先规范列名再统计(推荐)
先给重复列设置唯一名称,从你的需求判断,两个同名的Parameter 1列实际对应你要统计的Parameter 1和Parameter 2,先重命名列:
# 按列的顺序重命名,设置唯一列名 df.columns = ['First name_1', 'First name_2', 'Parameter 1', 'Parameter 2']
之后统计两列同时为Yes的行数,直接对布尔判断结果求和即可,不需要绕路用loc+count:
# 计算符合条件的总行数 yes_count = ((df['Parameter 1'] == 'Yes') & (df['Parameter 2'] == 'Yes')).sum() # 追加到Temp列表 Temp.append(yes_count)
提示:列名带空格、特殊字符或者存在重名风险时,统一用
df['列名']的方括号语法取列,不要用df.列名的属性访问语法,能避免绝大多数列索引错误。
方法2:不改列名,按列位置索引
如果你不想修改原有列名,可以直接用列的位置索引取值(索引从0开始计数):
# 第3列(位置索引2)是第一个Parameter列,第4列(位置索引3)是第二个Parameter列 yes_count = ((df.iloc[:, 2] == 'Yes') & (df.iloc[:, 3] == 'Yes')).sum() Temp.append(yes_count)
内容的提问来源于stack exchange,提问作者Сергей Корягин
相关产品推荐
相关产品推荐

