如何在Python中按第二列排序二维数组(numpy.ndarray)?
我正在把我的所有代码转换成Python。我想对一个有两列的数组进行排序,排序的依据是第二列,要求按升序排列。然后我需要把第一列的数据从第一行到第100行进行求和。我用了“Data.sort(axis=1)”,但这并没有效果。有没有人知道怎么解决这个问题?
2 个回答
5
sorted(Data, key=lambda row: row[1])
这个代码可以做到这一点。
64
使用 .argsort()
,它会返回一个 numpy.array
,这个数组里面是可以用来排序的索引。你可以把它当作一个函数来调用,也可以把它当作你数组的方法来使用。例如,假设你有
import numpy as np
arr = np.array([[-0.30565392, -0.96605562],
[ 0.85331367, -2.62963495],
[ 0.87839643, -0.28283675],
[ 0.72676698, 0.93213482],
[-0.52007354, 0.27752806],
[-0.08701666, 0.22764316],
[-1.78897817, 0.50737573],
[ 0.62260038, -1.96012161],
[-1.98231706, 0.36523876],
[-1.07587382, -2.3022289 ]])
现在你可以在想要排序的那一列上调用 .argsort()
,它会给你一个行索引的数组,这个数组可以用来对你原来的数组进行排序。
>>> arr[arr[:, 1].argsort()]
array([[ 0.85331367, -2.62963495],
[-1.07587382, -2.3022289 ],
[ 0.62260038, -1.96012161],
[-0.30565392, -0.96605562],
[ 0.87839643, -0.28283675],
[-0.08701666, 0.22764316],
[-0.52007354, 0.27752806],
[-1.98231706, 0.36523876],
[-1.78897817, 0.50737573],
[ 0.72676698, 0.93213482]])
你也可以用 numpy.argsort()
来实现同样的功能。
>>> arr[np.argsort(arr[:, 1])]
array([[ 0.85331367, -2.62963495],
[-1.07587382, -2.3022289 ],
[ 0.62260038, -1.96012161],
[-0.30565392, -0.96605562],
[ 0.87839643, -0.28283675],
[-0.08701666, 0.22764316],
[-0.52007354, 0.27752806],
[-1.98231706, 0.36523876],
[-1.78897817, 0.50737573],
[ 0.72676698, 0.93213482]])