Pandasのデータフレームをソートする方法まとめ

今回は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で元のデータを改変
  • 複数列をソートする場合、リスト形式で指定