我想问一个关于下面numpy数组的问题。
我有一个数据集,它有50行和15列,我创建了一个numpy数组:
x=x.to_numpy()
我想比较彼此的行(除了本身),然后找到满足以下条件的行数:
没有其他行
-值都小于
-如果一个相等,另一个应该更小
Money Weight
10 80
20 70
30 90
25 50
35 10
40 60
50 10
for instance for row 1:没有其他的行在两列上都更小,如果一个在另一列上更小行1在另一列上更小。满足条件
for行3:没有其他行在两列上都更小,它在列权重上与第6行相等,但在货币维度上它更小。满足条件
for行6:没有别的行在两列上都比它小。它在重量维度上与第3行相等,但在金钱上的价值更大。不满足条件
我需要满足numpy数组条件的行数。
我已经尝试了一堆代码,机器人找不到合适的算法。如果有人有什么建议,我将不胜感激。
iuc,您可以执行以下操作:
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)