Python で解析 19
“Advent Calendar 2013 - Python で解析!” の十九日目。DataFrame - 14
今回は sort を取り上げる。だいたい想像している通りのことができる。
1. データの準備
では、いつもの通りのデータの準備を。
In [1]: import pandas as pd In [2]: df = pd.DataFrame({ ...: u'1_睦月': [18100, 22000, 6800, 14100], ...: u'2_如月': [14600, 29000, 8800, 12100], ...: u'3_弥生': [9900, 12000, 12000, 8500] ...: }, index = [u'山田', u'鈴木', u'佐藤', u'木村']) In [3]: df Out[3]: 1_睦月 2_如月 3_弥生 山田 18100 14600 9900 鈴木 22000 29000 12000 佐藤 6800 8800 12000 木村 14100 12100 8500
2. index で並び替え
引数なしでソートすると、 index でのソートになる。
In [4]: df.sort() Out[4]: 1_睦月 2_如月 3_弥生 佐藤 6800 8800 12000 山田 18100 14600 9900 木村 14100 12100 8500 鈴木 22000 29000 12000
漢字の場合、文字コード順で並び替えることは実用的ではないので、ふりがななどの適切なデータを使うところだが、あえて漢字で実験してみた。
なお、明示的に index を指定しない場合は、シーケンス番号が index として振られるので、sort() を呼び出しても何も起こらない。
3, 指定したカラムで並び替え
カラムを指定したソートは次の通り。
In [5]: df.sort(u'3_弥生') Out[5]: 1_睦月 2_如月 3_弥生 木村 14100 12100 8500 山田 18100 14600 9900 鈴木 22000 29000 12000 佐藤 6800 8800 12000
複数のカラムを指定することもできる。
In [6]: df.sort([u'3_弥生', u'2_如月']) Out[6]: 1_睦月 2_如月 3_弥生 木村 14100 12100 8500 山田 18100 14600 9900 佐藤 6800 8800 12000 鈴木 22000 29000 12000
3, 指定したカラムで降順で並び替え
デフォルトでは昇順だが、降順も指定できる。
In [7]: df.sort(u'3_弥生', ascending=False) Out[7]: 1_睦月 2_如月 3_弥生 佐藤 6800 8800 12000 鈴木 22000 29000 12000 山田 18100 14600 9900 木村 14100 12100 8500
複数のカラムで、昇順と降順を混在させることもできる。
In [8]: df.sort([u'3_弥生', u'2_如月'], ascending=[True, False]) Out[8]: 1_睦月 2_如月 3_弥生 木村 14100 12100 8500 山田 18100 14600 9900 鈴木 22000 29000 12000 佐藤 6800 8800 12000
4, 列の並び替え
axis を指定すれば、列の並び替えもできる。
In [9]: df.sort(axis=1, ascending=False) Out[9]: 3_弥生 2_如月 1_睦月 山田 9900 14600 18100 鈴木 12000 29000 22000 佐藤 12000 8800 6800 木村 8500 12100 14100
axis は 0 が縦方向、 1 が横方向を意味する。
axis を使わずに、こんなやり方もできる。
In [10]: df.T.sort(ascending=False).T Out[10]: 3_弥生 2_如月 1_睦月 山田 9900 14600 18100 鈴木 12000 29000 22000 佐藤 12000 8800 6800 木村 8500 12100 14100
今回はこんなところで。