首页 > 解决方案 > IndexError:Python 升级后布尔数组不再匹配

问题描述

我有代码在 for 循环中运行。

对于循环的每次迭代,我找到我的 DataFrame 的那一行的最大值,然后创建一个列索引列表,其中出现该值(因为它有时可能出现不止一次),最后我取这个的 max() list 为包含最大值的行提供最高列索引。

我使用的代码如下所示:

index = 0
for i in df['column']:
    maxValue = df.values[index, :].max()
    peaklist = df.index[df.values[index, :] == maxValue].tolist()
    lastpeak = max(peaklist)
    index += 1

更新我的 Python 后(我认为这就是原因),我的“峰值列表”创建现在失败,出现 IndexError 说“布尔索引与维度 0 上的索引数组不匹配;维度是 'x' 但相应的布尔维度是 'y'”

我在论坛上查看了其他实例,似乎找不到一个简单的单行解决方案来重写我的代码并获得与以前相同的结果。任何人都可以帮忙吗?

编辑

示例数据框:

0      1      2      3      4      5      6      7

a     100    200    200    150    100    125    200
b
c
d
e

对于本例中的第一次迭代,“maxValue”将等于 200,创建的“peaklist”将是 [2,3,7],“lastpeak”将等于 7。

标签: pythonpandasindexing

解决方案


找到了解决方案,显然 numpy tuple 方法有效:

peaklist = np.where(df.values[index, :] == maxValue)
lastpeak = max(max(peak))

我将把这个问题搁置几天,希望有人有更好的方法或对问题的真正原因作出解释。


推荐阅读