¿Cómo ordenar un DataFrame por dos columnas, usando un orden personalizado?

Tengo un dataframe de pandas que necesito ordenar en un orden particular en una columna, y simplemente ascendiendo en otra. Ambas columnas tienen valores repetidos. Se ve más o menos así:

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 

Ahora, diga que necesito ordenar por las columnas 0 y 1, pero no alfabéticamente: la columna 0 primero debe seguir un orden:

 order = [ 'a', 'c', 'aa' ] 

¿Cómo puedo hacer eso?

Me gustaría tenerlo ordenado así:

 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 

Usando python 3.5.2, pandas 0.18.1

Puede usar la serie categórica de pandas para este fin, que proporciona la funcionalidad de un orden de clasificación individual:

  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