对多索引进行排序可以使用Dataframe.sort_index http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html功能。
这是一个小例子:
df = pd.DataFrame(
{"i1":[1,1,1,1,2,4,4,2,3,3,3,3],
"i2":[1,3,2,2,1,1,2,2,1,1,3,2],
"d1":['a','b','c','d','e','f','g','h','i','j','k','l']}
)
df.set_index(['i1', 'i2'], inplace=True)
df.sort_index()
Outputs:
d1
i1 i2
1 1 a
2 c
2 d
3 b
2 1 e
2 h
3 1 i
1 j
2 l
3 k
4 1 f
2 g
如果您想更改基于列的排序顺序,Dataframe.sort_index http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html函数接受一个参数ascending=
可以给出一个列表[True, False]
语句按顺序对应于列。
Categorical 是 pandas 中的一种新的闪亮数据类型,应该使用它,但此操作本身不需要它。
由于评论而编辑:
排序将始终按字母顺序或相反顺序排序。如果您想要自定义排序,那么您需要创建一个新列,该列可以按字母顺序排序,但它是可以确定排序的列的结果。使用以下方法执行此操作系列图 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.map.html,就像这个例子一样,首先用元音对数据集进行排序:
mappings = {'a': 0, 'b':1, 'c':1, 'd':1,
'e':0, 'f':1, 'g':1, 'h':1,
'i':0, 'j':1, 'k': 1, 'l': 1}
df['sortby'] = df['d1'].map(mappings)
df.sort('sortby')
d1 sortby
i1 i2
1 1 a 0
2 1 e 0
3 1 i 0
1 3 b 1
2 c 1
2 d 1
4 1 f 1
2 g 1
2 2 h 1
3 1 j 1
3 k 1
2 l 1
如果您不想要之后的排序列,您可以简单地将其删除,如下所示:
del df['sortby']