如何统计两个NumPy数组中符合指定条件的行数及报错解决
解决NumPy/Pandas组合统计时的IndexError问题
嘿,我来帮你搞定这个错误!你遇到的IndexError主要是两个问题导致的:运算符优先级错误,以及统计行数的方法不对。让我一步步给你解释和修正:
错误原因分析
运算符优先级踩坑:
在Python里,按位与运算符&的优先级比相等运算符==更高。你的原代码X_train['school_state']== 'nc' & y_train['project_is_approved'] == 0会被先计算'nc' & y_train['project_is_approved']——这完全偏离了你的统计逻辑,还会生成一个错误的数组,最终触发索引错误。统计方法用错了:
用apply(len)来统计符合条件的行数是错误的。apply(len)会对布尔数组的每个元素(True/False)计算长度,而每个布尔值的长度都是1,最终得到的是数组的总长度,根本不是你需要的符合条件的行数。
修正后的代码
你需要给每个条件单独加括号,确保先判断相等性,再用&组合两个布尔条件,然后用sum()来统计True的数量(因为True会被视为1,False视为0,求和就是符合条件的行数):
# 每个条件单独加括号,保证运算顺序正确,再用sum统计符合条件的行数 count_0 = ((X_train['school_state'] == 'nc') & (y_train == 0)).sum()
如果你的y_train是Pandas Series(而非NumPy数组),可以改成:
count_0 = ((X_train['school_state'] == 'nc') & (y_train['project_is_approved'] == 0)).sum()
验证示例
举个简单小例子验证逻辑:
假设:
- X_train['school_state'] = pd.Series(['nc', 'ca', 'nc', 'ny'])
- y_train = np.array([0, 1, 0, 1])
运行修正后的代码会得到2,这正是school_state为'nc'且project_is_approved为0的行数,完全符合预期。
内容的提问来源于stack exchange,提问作者Lalit Jain
相关产品推荐
相关产品推荐

