1
私は、Team、Year、およびGenderで値がインデックス付けされている以下のマルチインデックスPandasシリーズのようなものを持っています。パンダは複数の列のインデックス順を並べ替えます
>>> import pandas as pd
>>> import numpy as np
>>> multi_index=pd.MultiIndex.from_product([['Team A','Team B', 'Team C', 'Team D'],[2015,2016],['Male','Female']], names = ['Team','Year','Gender'])
>>> np.random.seed(0)
>>> df=pd.Series(index=multi_index, data=np.random.randint(1, 10, 16))
>>> df
>>>
Team Year Gender
Team A 2015 Male 6
Female 1
2016 Male 4
Female 4
Team B 2015 Male 8
Female 4
2016 Male 6
Female 3
Team C 2015 Male 5
Female 8
2016 Male 7
Female 9
Team D 2015 Male 9
Female 2
2016 Male 7
Female 8
私の目標は、4年/性別の組み合わせごとに、チームにランク順(男性2015、2016男性、女性2015、および女性2016)のデータフレームを取得することです。
それはチームによってインデックス付けされるように、私のアプローチは、最初のデータフレームスタックを解除することであった...
>>> unstacked_df = df.unstack(['Year','Gender'])
>>> print unstacked_df
>>>
>>>
Year 2015 2016
Gender Male Female Male Female
Team
Team A 6 1 4 4
Team B 8 4 6 3
Team C 5 8 7 9
Team D 9 2 7 8
そしてをループして、これらの4列のそれぞれをソートすることによって、インデックスの受注からデータフレームを作成します。 ..
>>> team_orders = np.array([unstacked_df.sort_values(x).index.tolist() for x in unstacked_df.columns]).T
>>> result = pd.DataFrame(team_orders, columns=unstacked_df.columns)
>>> print result
Year 2015 2016
Gender Male Female Male Female
0 Team C Team A Team A Team B
1 Team A Team D Team B Team A
2 Team B Team B Team C Team D
3 Team D Team C Team D Team C
もっと簡単なアプローチがありますか?
非常に良い。 argsortが各列をソートするインデックスを与える方法を理解していますが、x.index [x.argsort()]が正しく順序付けられたチームインデックスをどのように与えるかはわかりません。 – AJG519