【发布时间】:2019-06-13 03:54:18
【问题描述】:
当按第二级索引具有两级的 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) 重新索引结果。有没有办法以更简洁/优雅的方式做到这一点,理想情况下不会导致数据帧的副本?为什么首先对结果进行排序?在这种情况下似乎不直观。
【问题讨论】:
标签: python pandas multi-index