2016-09-23 5 views
1

は、私が同じ値を持つ2つの行のデータフレームがあるとしましょう:パンダ:行が同じランクを持っている場合はアルファベット順にソート

testdf = pd.DataFrame({'a': ['alpha','beta','theta','delta','epsilon'],'b':[1,2,3,3,4]}) 

     a b 
0 alpha 1 
1  beta 2 
2 theta 3 
3 delta 3 
4 epsilon 4 

は、今私は、列Bに基づいてそれらをソートする:

testdf['rank'] = testdf['b'].rank(ascending=False) 

     a b rank 
0 alpha 1 5.0 
1  beta 2 4.0 
2 theta 3 2.5 
3 delta 3 2.5 
4 epsilon 4 1.0 
行2と3は同じランクを持っているので

、私が見る人のためのアルファベット順にそれらをアレンジしたいと思います:

  a b rank 
0 alpha 1 5.0 
1  beta 2 4.0 
3 delta 3 2.5 
2 theta 3 2.5 
4 epsilon 4 1.0 

しかし、私はないんだけどこれを行う方法を確認してください。たぶん私はランクでグループ化して注文することができます...?しかし、私はその場所でそれを行う方法はわかりません。

答えて

1

それはsort_valuesを使用して複数の列でソートすることができます、あなたがしたいことは、その後a列で、最初のrankでソートすることであり、あなたはそれがインプレース起こるしたい場合は、私たちは以下のようなinplace=Trueを使用します。

In [14]: testdf.sort_values(['rank', 'a'], ascending=[False, True], inplace=True) 

In [15]: testdf 
Out[15]: 
     a b rank 
0 alpha 1 5.0 
1  beta 2 4.0 
3 delta 3 2.5 
2 theta 3 2.5 
4 epsilon 4 1.0 

inplace=Trueを使用しない場合、結果として得られたデータフレームが操作から返されます。

+0

ありがとうございます!私は一度に複数の値でソートする機能について知らなかった!すぐにあなたの答えを受け入れてくれます:) – ale19

関連する問題