具有两级多索引和一列的小型数据帧。索引的第二列(第1级)将按字母顺序排序,在“三”之前加上“四”。
import pandas as pd
df = pd.DataFrame({'A':[1,1,2,2],
'B':['One','Two','Three', 'Four'],
'X':[1,2,3,4]},
index=range(4)).set_index(['A','B']).sort_index()
df
X
A B
1 One 1
Two 2
2 Four 4
Three 3
显然,索引(B)的第二级按字母顺序排列,因此可以用分类索引替换,以强制正确排序。
df.index.set_levels(pd.CategoricalIndex(df.index.levels[1],
categories=['One','Two','Three', 'Four'], ordered=True),
level=1, inplace=True)
完成此操作后,检查索引会显示级别1确实是一个分类索引。但是对索引进行排序不会将行按所需顺序排列。
df.sort_index()
X
A B
1 One 1
Two 2
2 Four 4
Three 3
注意:如果数据框的简单索引为1级,则只能按预期工作。
答案 0 :(得分:1)
我设法通过在创建数据框之后设置索引来实现这一点 - 不确定这是否是最佳答案,但这是一个答案:
df = pd.DataFrame({'A':[1,1,2,2],
'B':['One','Two','Three', 'Four'],
'X':[1,2,3,4]})
df = df.set_index(['A', pd.CategoricalIndex(df['B'], categories=['One','Two','Three', 'Four'], ordered=True)])
del df['B']