パンダでは0.17私は階層インデックス(AとB)を維持しながら特定の列でソートしようとします。 Bは、連結によってデータフレームを設定するときに作成された実行番号です。私のデータは次のようになります。以下は Python Pandasマルチインデクスとカラムによるソート
C D
A B
bar two dull 5
three glossy 8
one shiny 10
foo one dull 3
three matt 12
two shiny 9
は、私が使用していたコードと結果である:
C D
A B
bar one shiny 10
two dull 5
three glossy 8
foo one dull 3
two shiny 9
three matt 12
これは私が必要なものです。注:Pandas 0.17は、dataframe.sortが推奨されなくなることを警告します。
df.sort_index(axis=0, level=0, as_index=True).groupby(C, as_index=True)
私はない特定の:列がない実りあるGROUPBY最初のインデックスをソートに切り替え、同様
df.sort_values(by="C", ascending=True).groupby(axis=0, level=0, as_index=True)
、および:
df.sort_values(by="C", ascending=True)
C D
A B
bar two dull 5
foo one dull 3
bar three glossy 8
foo three matt 12
bar one shiny 10
foo two shiny 9
追加.groupbyは同じ結果を生成します再インデクシングについて私は最初のインデックスAを保持する必要があり、2番目のインデックスBは再割り当てすることができますが、する必要はありません。簡単な解決法がないと私は驚いてしまうだろう。私はそれを見つけられないと思う。どんな提案も感謝しています。
編集:私は第2のインデックスBを落とした一方で、索引が複数の列を並べ替えの代わりに列になるように最初のインデックスAを再割り当て、それを再インデックス付け:静止
df.index = df.index.droplevel(1)
df.reset_index(level=0, inplace=True)
df_sorted = df.sort_values(["A", "C"], ascending=[1,1]) #A is a column here, not an index.
df_reindexed = df_sorted.set_index("A")
非常に詳細。
あなたのアプローチは私の中間的な解決策よりも進んでいますが、より良い方法があるはずです。 – raummensch