将多索引数据帧的顺序与另一个多索引 df 的顺序对齐,pandas

Align order of multiindex dataframe with the order of another multiindex 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'])

是否有简单的方法来对齐索引级别的顺序?

我认为你需要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