【python】DataFrameの並び替え
pandasのDataFrameの並び替えの方法について。
DataFrame.sort()ではエラーになってしまったので調べてみると、
0.19.0以降のバージョンからメソッドが削除されていて、
並び替えをするにはsort_values(), sort_index()を使用する必要がある。
まずはnumpyとpandasのインポート。
import numpy as np import pandas as pd from pandas import Series, DataFrame #ランダムなデータを作るために、randnもインポート from numpy.random import randn
sort_values(), sort_index()での並び替え
テスト用のDataFrameの作成
#randnを使用して、ランダムな5*3のDataFrameを作成 dframe = DataFrame(randn(15).reshape((5,3)) ,index=['A','C','D','B','E'],columns=['col1','col2','col3']) #出力結果 col1 col2 col3 A 1.065672 1.747904 0.035748 C 0.955697 0.472874 0.463158 D 0.286586 -0.695141 0.856504 B -1.279603 0.537965 -1.070702 E 1.100331 0.165572 -1.151672
sort_values()
sort_value()では、「by=''」で列を指定し、対象列を基準に並び替えされる。
降順にする場合は、ascending=Falseを指定する。
#sort_value()では、「by=''」で列を指定する dframe.sort_values(by='col2') #出力結果 col1 col2 col3 D 0.286586 -0.695141 0.856504 E 1.100331 0.165572 -1.151672 C 0.955697 0.472874 0.463158 B -1.279603 0.537965 -1.070702 A 1.065672 1.747904 0.035748 #降順にする場合は、ascending=Falseを指定する dframe.sort_values(by='col2', ascending=False) #出力結果 col1 col2 col3 A 1.065672 1.747904 0.035748 B -1.279603 0.537965 -1.070702 C 0.955697 0.472874 0.463158 E 1.100331 0.165572 -1.151672 D 0.286586 -0.695141 0.856504 #列の並び替えはaxis=1を指定する dframe.sort_values(by='B', axis=1) #出力結果 col1 col3 col2 A 1.065672 0.035748 1.747904 C 0.955697 0.463158 0.472874 D 0.286586 0.856504 -0.695141 B -1.279603 -1.070702 0.537965 E 1.100331 -1.151672 0.165572
sort_index()
sort_index()も同様に並び替えが出来る。
「by=''」は必要ない。
#indexで並び替え dframe.sort_index() #出力結果 col1 col2 col3 A 1.065672 1.747904 0.035748 B -1.279603 0.537965 -1.070702 C 0.955697 0.472874 0.463158 D 0.286586 -0.695141 0.856504 E 1.100331 0.165572 -1.151672 #columnで並び替え dframe.sort_index(axis=1, ascending=False) #出力結果 col3 col2 col1 A 0.035748 1.747904 1.065672 C 0.463158 0.472874 0.955697 D 0.856504 -0.695141 0.286586 B -1.070702 0.537965 -1.279603 E -1.151672 0.165572 1.100331
まとめ
DataFrameは、sort_index(), sort_values()で並び替えが出来る。