次のデータフレームがあります。
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)
それが示している:
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
私がしたいことは、このリストに従って任意の順序で「プレーヤー」インデックスをソートすることです(注:アルファベット順ではありません)。
reorderlist = [ 'Maurice Baker', 'Adrian Caldwell','Ratko Varda' ,'Ryan Bowen' ,'Cedric Hunter']
どうやってやるの?
ただ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
文字列のリストでカスタムの並べ替え順序を取得するには、それをカテゴリとして宣言し、その順序を並べ替えで手動で指定します。
_player_order = pd.Categorical([ 'Maurice Baker', 'Adrian Caldwell','Ratko Varda' ,'Ryan Bowen' ,'Cedric Hunter'],
ordered=True)
_
これは、pandasがCategoricalsをインデックスとしてまだ許可していないためです:df.set_index(keys=player_order, inplace=True)
_TypeError: unhashable type: 'Categorical'
_
したがって、df.sort_index(level=player_order)
を使用して手動でカスタムソートを行う必要があります