删除python numpy数组中与列的前n个值不对应的所有行

时间:2018-11-01 09:11:52

标签: python python-3.x pandas numpy

我有以下两列数组。我想确定第二列中的前3个最高值,并删除不包含前3个值的所有行。

array([[0, 3],
       [1, 4],
       [2, 5],
       [3, 5],
       [4, 2]])

输出:

array([[2, 5],
       [3, 5],
       [1, 4]])

4 个答案:

答案 0 :(得分:1)

您可以使用numpy argsort并获取最后3行

array_name[np.argsort(array_name, axis = 0)[:,1]][-3:]

答案 1 :(得分:1)

由于排序仅需要在第二列上进行,因此可以使用pandas。它使事情变得容易一些:

import pandas

In [725]: x
Out[725]: 
array([[0, 3],
       [1, 4],
       [2, 5],
       [3, 5],
       [2, 4]])

In [724]: pd.DataFrame(x).sort_values(1, ascending=False).head(3).values.tolist()
Out[724]: [[2, 5], [3, 5], [1, 4]]

答案 2 :(得分:0)

我认为这可能对您有帮助

x  = ([[0, 3],[1, 4],[2, 5],[3, 5],[4, 2]])

f = sorted(x, key=lambda x: x[1])
print(f[2:])

通过this链接

答案 3 :(得分:0)

尽管我同意Anagnostou John的意见,但我建议像这样更改它:

a  = np.array([[0, 3],
               [1, 4],
               [2, 5],
               [3, 5],
               [4, 2]])

f = sorted(a, key=lambda x: -x[1])
print(f[:3])

因为它也可以用于更大的数组。