2017-01-31 5 views
2

У меня есть два мультииндекса данных, которые содержат одни и те же уровни мультииндекса. Единственное различие между ними - порядок, в котором расположены уровни индекса.Выравнивание порядка мультииндекса данных с порядком другого мультииндекса df, pandas

Есть ли способ переупорядочить уровни мультииндекса из df1, чтобы они были такими же, как и у df2?

df1.index.names дает

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 дает

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

Есть простой способ выровнять порядок уровней индекса?

ответ

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

спасибо. Я проверяю свои функции pandas, и это работает отлично, но теперь я впервые использовал его. – jezrael

Смежные вопросы