我有两个多索引数据帧,它们包含相同的多索引级别。它们之间的唯一区别是索引级别的排列顺序。
有没有办法从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'])
是否有一种简单的方法来对齐索引级别的顺序?
答案 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