2017-01-31 18 views
2

同じマルチインデックスレベルを含む2つのマルチインデックスデータフレームがあります。それらの間の唯一の違いは、インデックスレベルが配置される順序です。マルチインデックスデータフレームの順序を別のマルチインデックスの順序で整列するdf、pandas

マルチインデックスのレベルをdf1から並べ替える方法はありますか?df2のものと同じになるようにしますか?

df1.index.namesインデックス・レベルの順序を整列させるための簡単な方法はあり

FrozenList([u'Local code', u'Detailed Instrument', u'Nature of holding', u'Issuer long name', u'Internal Issuer rating', u'holding type']) 

を生み出す

FrozenList([u'Local code', u'Nature of holding', u'Issuer long name', u' Internal Issuer rating', u'holding type', u'Detailed Instrument']) 

df2.index.namesが得?

答えて

3

私はあなたがDataFrame.reorder_levelsが必要だと思う:

df1 = df1.reorder_levels(df2.index.names) 

サンプル:!

df1 = pd.DataFrame({'A':[7,2,3], 
        'B':[5,5,6], 
        'C':[4,8,9], 
        'D':[0,3,5], 
        'E':[8,3,6], 
        'F':[9,4,3]}).set_index(['A','B', 'C']) 

print (df1) 
     D E F 
A B C   
7 5 4 0 8 9 
2 5 8 3 3 4 
3 6 9 5 6 3 

df2 = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3]}).set_index(['C','A', 'B']) 

print (df2) 
     D E F 
C A B   
7 1 4 1 5 7 
8 2 5 3 3 4 
9 3 6 5 6 3 

df1 = df1.reorder_levels(df2.index.names) 
print (df1) 
     D E F 
C A B   
4 7 5 0 8 9 
8 2 5 3 3 4 
9 3 6 5 6 3 
+0

華麗!私はこれを知らなかった – piRSquared

+0

ありがとう。私は私のパンダの機能をチェックし、これは完璧に動作しますが、最近は初めて使用しました。 – jezrael