Sorting value of one array according to another in Python
Start your free 7-days trial now!
To sort the value of one array according to another in Python use the np.argsort(~)
method.
Example
Consider the following NumPy arrays:
import numpy as npx = np.array(['A','B','C','D'])y = np.array([4,3,2,1])
Ascending order
To sort array y
in ascending order and also sort array x
maintaining the pair relationships between elements in the two arrays:
[1 2 3 4]['D' 'C' 'B' 'A']
First we get the integer indices that would result in array y
being sorted in ascending order, and store them to variable sort
. If we actually printed this variable we would see an array [3 2 1 0]
. This means that to obtain an ascending sorted copy of array y
, the element at index position 3 should come first, element at index position 2 should come second and so on.
We then take sort
and apply it to both y
and x
. For both arrays we see the printed arrays have the element that was at index position 3 (1
and 'D'
respectively) appear first, then have element that was at index position 2 (2
and 'C'
respectively) appear next.
Descending order
To sort array x
in descending order and also sort array y
maintaining the pair relationships between elements in the two arrays:
['D' 'C' 'B' 'A'][1 2 3 4]
Although np.argsort(~)
does not natively support descending order, you can leverage negation (~
) to implement the functionality. By negating the sort
array here, the index position of the highest elements will now come first and lowest elements last.