2017-02-24 7 views
2

私はある列で特定の順序でソートし、別の列で昇順に並べ替える必要のあるパンダDataFrameを持っています。 両方の列に繰り返し値があります。 それは多かれ少なかれ、次のようになります。今カスタムオーダーを使用してDataFrameを2列でソートする方法は?

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' ] 

私はそれをしますか?

私はそれがこのようにソートしているしたいと思います:あなたはどの物資、この目的のためにパンダのカテゴリシリーズを使用することができるのpython 3.5.2を使用して

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 

、パンダ0.18.1

+0

このようにしたい場合は、追加の列th atは '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

関連する問題