2017-02-24 21 views
2

我有一個熊貓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 

現在,說我需要按列0和1的順序,但不按字母順序:列0首先應遵循的順序:

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

如何我要這樣做嗎?

我想有它排序是這樣的:

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 

使用Python 3.5.2,熊貓0.18.1

+0

如果你想這樣做,你可以創建一個額外的列th在你的'0'列保存你的字符串的長度,然後首先按字符串的長度排序,然後由字符串自己排序。 – Khris

回答

6

你可以用大熊貓的分類系列用於此目的,其耗材一個單獨的排序順序的功能:

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 
+0

不錯!今天我學到了一些新東西,謝謝! :) – Luis