Numpy数组比较(Python)

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

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

x=x.to_numpy()

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

  • 两个值都较小
  • 如果一个相等,则另一个应较小
Money Weight
10 80
20 70
30 90
25 50
35 10
40 60
50 10

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

ygya80vv

ygya80vv1#

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

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

产出

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

细目

# pairwise comparison between rows (elementwise)
comparison = (arr <= arr[:, None])

# reduce to find only rows that have all values lower
lower_values = comparison.all(2)

# count the number of rows with lower values
total_lower = lower_values.sum(1)

# leave only those that include one row (itself)
mask = total_lower <= 1

# filter the original DataFrame
res = df[mask]

print(res)

相关问题