MultiIndexは、ラベルの値が整列していないときに、列の値を取得するために関数get_level_values
を使用したときに、一見無作為に列を並べ替えます。例えばPandas MultiIndex並べ替える列
、私は私が正しい順序でそのラベル私はデータフレームの中に、このマルチインデックスを入れて、get_levels_values
機能を実行すると、0〜4
import pandas as pd
import numpy as np
work_index=pd.MultiIndex(levels=[['ANA','ANC','PPI','SCAF','SAC'],['Sample']],labels=[[0,1,2,3,4],[0,0,0,0,0]])
に命じている私は['ANA','ANC','PPI','SCAF','SAC']
を得るマルチインデックスを作成することができます得ることを期待する。私がいない番号順にラベルでmultindexを作成する場合
work=pd.DataFrame(np.random.randn(5,5),columns=work_index)
work.columns #note the proper order
>>> MultiIndex(levels=[['ANA', 'ANC', 'PPI', 'SCAF', 'SAC'], ['Sample']],
labels=[[0, 1, 2, 3, 4], [0, 0, 0, 0, 0]])
work.columns.get_level_values(0) #same order as before
>>> Index(['ANA', 'ANC', 'PPI', 'SCAF', 'SAC'], dtype='object')
しかし、get_level_values
は奇妙な、一見ランダムな順序を返します。ここでは[0,1,2,3,4]
の代わりに[2,1,4,3,0]
を選択します。
not_work_index=pd.MultiIndex(levels=[['ANA','ANC','PPI','SCAF','SAC'],['Sample']],labels=[[2, 1, 4, 3, 0],[0,0,0,0,0]])
['PPI','ANC','SAC','SCAF','ANA']
not_work=pd.DataFrame(np.random.randn(5,5),columns=not_work_index)
not_work.columns
>>> MultiIndex(levels=[['ANA', 'ANC', 'PPI', 'SCAF', 'SAC'], ['Sample']],
labels=[[2, 1, 4, 3, 0], [0, 0, 0, 0, 0]])
not_work.columns.get_level_values(0)
>>> Index(['PPI', 'ANC', 'SAC', 'SCAF', 'ANA'], dtype='object')
ラベルが順番になっていない場合でも、順番にレベルを返すためget_level_values
ための方法はあり、むしろ、私に['ANA','ANC','PPI','SCAF','SAC']
を与えるものではありませんデータフレームにこれを置きますか?列を正しい順序で取得するために上位レベルを照会するもう1つの方法はありますか?
を私はあなたの例を実行していないが、一般的にはマルチインデックスは、彼らがどのように私は、その後multindexを並べ替えるでしょう – EdChum
有用であるためにソートする必要がありますか?私が自分のCSVを読むと、これらの不均一なラベルが作成されます –
これはバグかどうかわかりませんが、レベル値を取得すると常にソートされていますが、インデックスオブジェクトは作成した順序を知っているようです実際の挿入順序を取得するには、次のようにしなければなりません:In [11]: not_work.columns.get_level_values(not_work.columns.labels [0]] Out [11]: Index([ 'SAC'、 'ANC'、 'ANA'、 'SCAF'、 'PPI']、dtype = 'object') ' – EdChum