How can I sort an array in NumPy by the nth column?

For example,

```
a = array([[9, 2, 3],
[4, 5, 6],
[7, 0, 5]])
```

I'd like to sort rows by the second column, such that I get back:

```
array([[7, 0, 5],
[9, 2, 3],
[4, 5, 6]])
```

@steve's is actually the most elegant way of doing it.

For the "correct" way see the order keyword argument of numpy.ndarray.sort

However, you'll need to view your array as an array with fields (a structured array).

The "correct" way is quite ugly if you didn't initially define your array with fields...

As a quick example, to sort it and return a copy:

```
In [1]: import numpy as np
In [2]: a = np.array([[1,2,3],[4,5,6],[0,0,1]])
In [3]: np.sort(a.view('i8,i8,i8'), order=['f1'], axis=0).view(np.int)
Out[3]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
```

To sort it in-place:

```
In [6]: a.view('i8,i8,i8').sort(order=['f1'], axis=0) #<-- returns None
In [7]: a
Out[7]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
```

@Steve's really is the most elegant way to do it, as far as I know...

The only advantage to this method is that the "order" argument is a list of the fields to order the search by. For example, you can sort by the second column, then the third column, then the first column by supplying order=['f1','f2','f0'].

I suppose this works: `a[a[:,1].argsort()]`

This indicates the second column of `a`

and sort it based on it accordingly.

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow