将多重索引 DataFrame 的顺序与另一个多重索引 DataFrame 相一致,使用 pandas。

3

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

是否有办法从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个回答

4
我认为您需要使用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

!卓越的!我不知道这个。 - piRSquared
谢谢。我检查了我的Pandas函数,它完美地工作了,但这是我第一次使用它。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接