当使用第二级索引对具有两个级别的MultiIndexed pandas数据帧进行索引时,结果会自动按索引排序。是否有一种优雅的方法可以在不排序的情况下获得结果?
这里是一个玩具示例:
>>> df = pd.DataFrame(np.ones((10, 3)), columns=list("ABC"))
>>> df.index = pd.MultiIndex.from_product([range(5), list("AB")])
>>> df
A B C
0 A 1.0 1.0 1.0
B 1.0 1.0 1.0
1 A 1.0 1.0 1.0
B 1.0 1.0 1.0
2 A 1.0 1.0 1.0
B 1.0 1.0 1.0
3 A 1.0 1.0 1.0
B 1.0 1.0 1.0
4 A 1.0 1.0 1.0
B 1.0 1.0 1.0
>>> values = ["B", "A"]
>>> idx = pd.IndexSlice
>>> subset = df.loc[idx[:, values], values]
>>> subset
B A
0 A 1.0 1.0
B 1.0 1.0
1 A 1.0 1.0
B 1.0 1.0
2 A 1.0 1.0
B 1.0 1.0
3 A 1.0 1.0
B 1.0 1.0
4 A 1.0 1.0
B 1.0 1.0
我原本希望结果的第二级索引按照选定的列的顺序排序,例如
["B", "A"]
,但实际上返回的是按照排序的顺序。我找到的一个解决方法是使用subset.reindex(index=values, level=1)
重新索引结果。是否有更简洁/优雅的方法来做到这一点,最好不会导致数据框的复制?为什么结果首先要排序呢?在这种情况下,它似乎不直观。