Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort pandas dataframe by custom order on string index

Tags:

I have the following data frame:

import pandas as pd  # Create DataFrame df = pd.DataFrame( {'id':[2967, 5335, 13950, 6141, 6169],\  'Player': ['Cedric Hunter', 'Maurice Baker' ,\             'Ratko Varda' ,'Ryan Bowen' ,'Adrian Caldwell'],\  'Year': [1991 ,2004 ,2001 ,2009 ,1997],\  'Age': [27 ,25 ,22 ,34 ,31],\  'Tm':['CHH' ,'VAN' ,'TOT' ,'OKC' ,'DAL'],\  'G':[6 ,7 ,60 ,52 ,81]})   df.set_index('Player', inplace=True) 

It shows:

Out[128]:                   Age   G   Tm  Year     id Player Cedric Hunter     27   6  CHH  1991   2967 Maurice Baker     25   7  VAN  2004   5335 Ratko Varda       22  60  TOT  2001  13950 Ryan Bowen        34  52  OKC  2009   6141 Adrian Caldwell   31  81  DAL  1997   6169 

What I want to do is to sort the 'Player' index in the arbitrary order according to this list (NOTE: not alphabetical order):

reorderlist = [ 'Maurice Baker', 'Adrian Caldwell','Ratko Varda' ,'Ryan Bowen' ,'Cedric Hunter'] 

How can I do that?

like image 673
scamander Avatar asked Apr 25 '18 00:04

scamander


1 Answers

Just reindex

df.reindex(reorderlist) Out[89]:                   Age   G   Tm  Year     id Player                                     Maurice Baker     25   7  VAN  2004   5335 Adrian Caldwell   31  81  DAL  1997   6169 Ratko Varda       22  60  TOT  2001  13950 Ryan Bowen        34  52  OKC  2009   6141 Cedric Hunter     27   6  CHH  1991   2967 

Update info you have multiple players with same name

out = df.iloc[pd.Categorical(df.index,reorderlist).argsort()] 
like image 161
BENY Avatar answered Oct 03 '22 01:10

BENY