今回はPandasのデータフレームをソートする方法をマスターしましょう。行と列のソートはもちろん、値の順序並び替えのやり方も解説していきます。
もくじ
データフレームのソート方法をマスターする
sort_index()sort_values()でそれぞれインデックスと要素の並び替えができます。引数でascending=Falseとすることで降順に変更可能で、axis=1とすると列名の並び替えができます。
これらを組み合わせるとどんな形にでもデータをソート変形することができます。ではそれぞれを見ていきましょう。
sort_indexでインデックス(行名・列名)に基づいてソートする
sort_index()メソッドを使用することで、インデックス(カラム名・行名)に基づいてソートすることができます。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Gamma', 'Delta','Alpha','Beta'], columns=['B','A','C']) >>> df B A C Gamma 1 2 3 Delta 10 20 30 Alpha 100 200 300 Beta 1000 2000 3000 >>> # 行名で並び替え、引数が空の場合昇順 >>> df.sort_index() B A C Alpha 100 200 300 Beta 1000 2000 3000 Delta 10 20 30 Gamma 1 2 3 >>> # 引数がascending=Falseの場合、降順 >>> df.sort_index(ascending=False) B A C Gamma 1 2 3 Delta 10 20 30 Beta 1000 2000 3000 Alpha 100 200 300 >>> # 引数がaxis=1の場合、列を昇順で並び替える >>> df.sort_index(axis=1) A B C Gamma 2 1 3 Delta 20 10 30 Alpha 200 100 300 Beta 2000 1000 3000
MEMO
元のオブジェクトを変更する場合には、引数をinplace=Trueとする。sort_valuesで要素の値に基づいてソートする
sort_values()メソッドを使うことで、要素の値を元にソートすることができる。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Gamma', 'Delta','Alpha','Beta'], columns=['B','A','C']) >>> df B A C Gamma 1 2 3 Delta 10 20 30 Alpha 100 200 300 Beta 1000 2000 3000 >>> # C列を昇順でソートする >>> df.sort_values("C") B A C Gamma 1 2 3 Delta 10 20 30 Alpha 100 200 300 Beta 1000 2000 3000 >>> # C列を降順でソートする >>> df.sort_values("C", ascending=False) B A C Beta 1000 2000 3000 Alpha 100 200 300 Delta 10 20 30 Gamma 1 2 3 >>> # Deltaの行を降順でソートする >>> df.sort_values("Delta", axis=1, ascending=False) C A B Gamma 3 2 1 Delta 30 20 10 Alpha 300 200 100 Beta 3000 2000 1000
複数列に基づいてソートする方法(応用編)
ここまでインデックスと要素の値のソート方法をそれぞれ見てきました。しかし、実際のデータ解析では複数の要素に基づいてソートをかけてデータ整形したい場合などがあります。複数列に基づいたソート方法を応用編としてご紹介します。
複数列のソートはリスト形式で指定します。リストに入れた要素の0番目のラベル名から昇順にソートされます。また、引数ascendingをリストで指定すると、それぞれの列に対して昇順・降順を選択することができます。
>>> # データフレーム内のサンプル数値を変更してます >>> df=pd.DataFrame([[1,5,3],[60,50,300],[100,50,40],[3000,1000,2000]], index=['Gamma', 'Delta','Alpha','Beta'], columns=['B','A','C']) >>> df B A C Gamma 1 5 3 Delta 60 50 300 Alpha 100 50 40 Beta 3000 1000 2000 >>> # A列の値をソートした後、C列の値をソート >>> df.sort_values(['A', 'C']) B A C Gamma 1 5 3 Alpha 100 50 40 Delta 60 50 300 Beta 3000 1000 2000 >>> # Aを降順でソートした後、C列の値を昇順でソート >>> df.sort_values(['A', 'C'], ascending=[False, True]) B A C Beta 3000 1000 2000 Alpha 100 50 40 Delta 60 50 300 Gamma 1 5 3
まとめ
データフレームのソートの使い方について解説してきました。最後にこの記事のまとめを書いておきます。
覚えておきたいポイント
- sort_index()でインデックス(行名・列名)をソート
- sort_values()で要素の値をソート
- ascending=Falseで降順に変更
- axis=1でカラム名方向にソート
- inplace=Trueで元のデータを改変
- 複数列をソートする場合、リスト形式で指定