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

时间:2017-01-31 14:07:37

标签: pandas multi-index

我有两个多索引数据帧,它们包含相同的多索引级别。它们之间的唯一区别是索引级别的排列顺序。

有没有办法从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'])

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

1 个答案:

答案 0 :(得分: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