如何使用自定义顺序按两列对DataFrame进行排序?

Lui*_*uis 2 python sorting dataframe pandas

我有一个pandas DataFrame,我需要在一列中以特定顺序排序,而在另一列中升序.两列都有重复的值.它看起来或多或少像这样:

import pandas as pd

df = pd.DataFrame()
df[0] = pd.Series( [ 'a', 'aa', 'c' ] * 2 )
df[1] = pd.Series( [ 1, 2 ] * 3 )
df[2] = pd.Series( range(6) )
print( df )

    0  1  2
0   a  1  0
1  aa  2  1
2   c  1  2
3   a  2  3
4  aa  1  4
5   c  2  5
Run Code Online (Sandbox Code Playgroud)

现在,假设我需要按列0和1排序,但不按字母顺序排序:第0列应首先遵循订单:

order = [ 'a', 'c', 'aa' ]
Run Code Online (Sandbox Code Playgroud)

我怎么做?

我希望它像这样排序:

print( sorted_df )

    0  1  2
0   a  1  0
1   a  2  3
2   c  1  2
3   c  2  5
4  aa  1  4
5  aa  2  1
Run Code Online (Sandbox Code Playgroud)

使用python 3.5.2,pandas 0.18.1

pan*_*sen 7

您可以使用pandas的分类系列来提供单个排序顺序的功能:

 df[0] = pd.Categorical(df[0], order)
 print(df.sort_values([0, 1]))

    0   1   2
 0  a   1   0
 3  a   2   3
 2  c   1   2
 5  c   2   5
 4  aa  1   4
 1  aa  2   1
Run Code Online (Sandbox Code Playgroud)