首页 > 解决方案 > pandas.reorder_levels 只有一个索引

问题描述

Pandas 提供了使用 reorder_index 函数重新排序索引的功能:

pandas.DataFrame({"A" : [1, 2, 3], "B" : [4,5,6], "C" : [7,8,9]}).set_index(["A", "B"]).reorder_levels(["B", "A"])

但是它似乎不适用于单索引 DataFrames :

pandas.DataFrame({"A" : [1, 2, 3], "B" : [4,5,6]}).set_index("A").reorder_levels(["A"])

我做错了什么吗?

PS:我知道只用一个索引对索引重新排序是没有意义的,但这是一种边界效应,为了代码清晰,我通常倾向于避免不必要的 if 语句。

标签: pandasindexing

解决方案


执行以下操作相当于重新排序:

import pandas as pd

df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6], "C": [7, 8, 9]}).set_index(["A", "B"])
print(df.reset_index().set_index(['B', 'A']))

输出

     C
B A   
4 1  7
5 2  8
6 3  9

它适用于单个索引:

odf = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}).set_index("A")
print(odf)

输出

   B
A   
1  4
2  5
3  6

推荐阅读