Suppose I have a list of names
names = ['Alex','Brad', 'Camilla']
If I had a numpy array like
norder = array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])
Then I could use norder to access names by doing
names[norder]
>>> array(['Alex', 'Brad', 'Camilla', 'Brad', 'Alex', 'Brad', 'Alex',
'Camilla', 'Brad', 'Brad'], dtype='<U7')
How do I go in the reverse? Given
order= array(['Alex', 'Brad', 'Camilla', 'Brad', 'Alex', 'Brad', 'Alex',
'Camilla', 'Brad', 'Brad'], dtype='<U7')
and names, how do I return something that looks like norder?
(np.array(names) == order[:, None]).argmax(1)namesbe used and in the order presented? For the specific example you have providedpd.factorize(order)[0]is sufficient.namesis a np.array not a list.