J'ai la trame de données suivante:
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)
Ça montre:
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
Ce que je veux faire, c'est trier l'index 'Player' dans l'ordre arbitraire selon cette liste (REMARQUE: pas dans l'ordre alphabétique):
reorderlist = [ 'Maurice Baker', 'Adrian Caldwell','Ratko Varda' ,'Ryan Bowen' ,'Cedric Hunter']
Comment puis je faire ça?
Juste 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
Pour obtenir un ordre de tri personnalisé sur votre liste de chaînes, déclarez-le comme catégorique et spécifiez manuellement cet ordre dans un tri:
player_order = pd.Categorical([ 'Maurice Baker', 'Adrian Caldwell','Ratko Varda' ,'Ryan Bowen' ,'Cedric Hunter'],
ordered=True)
En effet, pandas n'autorise pas encore les catégoriels comme indices: df.set_index(keys=player_order, inplace=True)
TypeError: unhashable type: 'Categorical'
Vous souhaiterez donc effectuer un tri manuel personnalisé à l'aide de df.sort_index(level=player_order)