Pandas のデータフレームをソートする

このページでは、インデックスや値に基づいてデータフレームをソート (並び替え) する方法について紹介します。

インデックス (行名・列名) に基づいてソートする

sort_index() メソッドを利用して、インデックス(カラム名、行名)に基づいてソートを行うことができます。
ascending=False は、降順にソートすることを示します。なお、ascending=False を省略すると、昇順でのソートとなります。
axis=1 が行方向のソートを意味し、省略した場合は、行名に基づくソートとなります。

>>> import pandas as pd
>>> import numpy as np

>>> # データフレーム df を作成
>>> dates = pd.date_range('20130101', periods=6)
>>> df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

>>> # 行名に基づいてソート
>>> df.sort_index(ascending=False)
                   A         B         C         D
2013-01-06  1.332536 -1.359627 -0.630888 -1.211916
2013-01-05  0.731170  0.064171 -0.239234  0.298792
2013-01-04  0.168538  1.550001  1.002619  0.518160
2013-01-03 -0.220238 -0.521626  0.405202 -1.185080
2013-01-02  0.496579 -0.286737  0.745850  0.468184

>>> # カラム名 (列名) に基づいてソート
>>> df.sort_index(axis=1, ascending=False)
                   D         C         B         A
2013-01-01  0.938796 -0.118212 -0.383022 -0.156236
2013-01-02  0.468184  0.745850 -0.286737  0.496579
2013-01-03 -1.185080  0.405202 -0.521626 -0.220238
2013-01-04  0.518160  1.002619  1.550001  0.168538
2013-01-05  0.298792 -0.239234  0.064171  0.731170
2013-01-06 -1.211916 -0.630888 -1.359627  1.332536

値に基づいてソートする

sort_values() メソッドを利用して、データフレームを値に基づいて並び替えを行うことができます。

>>> # B 列の値の小さい順 (昇順) にソート
>>> df.sort_values(by='B') 
                   A         B         C         D
2013-01-06  1.332536 -1.359627 -0.630888 -1.211916
2013-01-03 -0.220238 -0.521626  0.405202 -1.185080
2013-01-01 -0.156236 -0.383022 -0.118212  0.938796
2013-01-02  0.496579 -0.286737  0.745850  0.468184
2013-01-05  0.731170  0.064171 -0.239234  0.298792

>>> # C 列の値の大きい順 (降順) にソート
>>> df.sort_values(by='C', ascending=False)
                   A         B         C         D
2013-01-04  0.168538  1.550001  1.002619  0.518160
2013-01-02  0.496579 -0.286737  0.745850  0.468184
2013-01-03 -0.220238 -0.521626  0.405202 -1.185080
2013-01-01 -0.156236 -0.383022 -0.118212  0.938796
2013-01-05  0.731170  0.064171 -0.239234  0.298792
2013-01-06  1.332536 -1.359627 -0.630888 -1.211916

参考: 10 Minutes to pandas — pandas 0.18.0 documentation