2017-08-17 9 views
2

値、誰かが次のようにパンダのデータフレームを並べ替える方法についての良い方法を知っている場合、私は思っていた:パンダDATAFRAMEの順序とソートは

a)のIが表示されたIDを持つ以下のランダムにソートされたデータを持っています

:私は昇順でラベルをソートし、その後も、このように昇順にIDをソートしますが、グループ化されていない、ので、したい

 
id | label 
------ | ------ 
1 | 1 
1 | 0 
1 | 0 
2 | 1 
2 | 0 
2 | 0 
3 | 0 
3 | 0 
3 | 0 

:複数回と0または1のいずれかであるラベル

 
id | label 
------ | ------ 
1 | 0 
2 | 0 
3 | 0 
1 | 0 
2 | 0 
3 | 0 
3 | 0 
1 | 1 
2 | 1 

ありがとうございます!

答えて

3

最初にidとlabelでソートし、次にcumcountを使用して1,2,3グループを表すインデックスを作成し、インデックスとラベルで並べ替えます。

df_out = df.sort_values(by=['id','label'])\ 
    .set_index(df.groupby('id').cumcount())\ 
    .sort_index()\ 
    .sort_values(by='label') 

出力:

id label 
0 1  0 
0 2  0 
0 3  0 
1 1  0 
1 2  0 
1 3  0 
2 3  0 
2 1  1 
2 2  1 
+1

完璧に動作し、どうもありがとうございました!あなたは素晴らしいです。 – SirTobi

+1

++心の読書のため:-) – MaxU

+1

私はそれが間違いなくcumcountに関連していることを知っていた。私は試しましたが失敗しました。これはsort_indexを使用すると素晴らしいです。 – Dark

関連する問題