【问题标题】:IndexError: boolean array no longer matching after Python upgradeIndexError:Python 升级后布尔数组不再匹配
【发布时间】:2021-07-13 15:53:22
【问题描述】:

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

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

我使用的代码如下所示:

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。

【问题讨论】:

  • 不确定你想要的输出是什么 - 你能分享一个例子df,最好是文本,以及预期的输出?
  • 当然,请参阅更新后的帖子。我缺少的输出是“peaklist” - 它只是一个包含列索引的列表,其中索引是可以找到该行最大值的列。

标签: python pandas indexing


【解决方案1】:

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

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

我将把这个问题搁置几天,希望有人有更好的方法或解释问题的实际原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2021-11-12
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2020-06-09
    相关资源
    最近更新 更多