Numpy数组比较(Python)

fquxozlt  于 2022-12-18  发布在  Python
关注(0)|答案(1)|浏览(196)

我想问一个关于下面numpy数组的问题。
我有一个数据集,它有50行和15列,我创建了一个numpy数组,如下所示:

  1. x=x.to_numpy()

我想将行相互比较(除了自身),然后找到满足以下条件的行数:
没有其它行

  • 两个值都较小
  • 如果一个相等,则另一个应较小
  1. Money Weight
  2. 10 80
  3. 20 70
  4. 30 90
  5. 25 50
  6. 35 10
  7. 40 60
  8. 50 10

例如对于行1:没有其他行在两列上都较小,如果一列在另一列上较小,则行1在另一列上较小。满足条件
对于第3行:没有其他行在两列上都较小,列权重与第6行相等,但货币维度较小。满足条件
对于第6行:没有其他行在两列上都较小。它在权重维度上与第3行相等,但货币价值更大。不满足条件
我需要满足条件的行数在一个numpy数组。
我已经尝试了一堆代码机器人找不到一个适当的算法。所以如果任何人有一个想法,我将不胜感激。

ygya80vv

ygya80vv1#

IIUC,您可以执行以下操作:

  1. mask = (arr <= arr[:, None]).all(2).sum(1) < 2
  2. res = df[mask]
  3. print(res)

产出

  1. Money Weight
  2. 0 10 80
  3. 1 20 70
  4. 3 25 50
  5. 4 35 10

细目

  1. # pairwise comparison between rows (elementwise)
  2. comparison = (arr <= arr[:, None])
  3. # reduce to find only rows that have all values lower
  4. lower_values = comparison.all(2)
  5. # count the number of rows with lower values
  6. total_lower = lower_values.sum(1)
  7. # leave only those that include one row (itself)
  8. mask = total_lower <= 1
  9. # filter the original DataFrame
  10. res = df[mask]
  11. print(res)

展开查看全部

相关问题