【リファレンス】データフレームの並び替え【Python】

DataFrame.sort_values(by=カラム名)

並び替えをしたい列が1つの場合

DataFrame.sort_values(by=カラム名)

 

並び替えをしたい列が2つの場合

DataFrame.sort_values(by=[カラム名1,カラム名2])

 

それではサンプルデータを使っていじってみましょう。

サンプルコードで解説

サンプルデータ作成

in

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
                              'B': [130 , 110 , 120 , 140 , 150]},
                              index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

print(df)

out

             A    B
2000年  a  130
2001年  b  110
2002年  b  120
2003年  b  140
2004年  a  150

並び替えをしたい列が1つ

デフォルトは、昇順で並び替えになっています。

in

df = df.sort_values(by='A')

print(df)

out

             A   B
2000年  a  130
2004年  a  150
2001年  b  110
2002年  b  120
2003年  b  140

降順で並び替え

降順で並び替えをしたい場合は、引数「ascending」をFalseにします。

in

df = df.sort_values(by='A',ascending=False)

print(df)

out

             A    B
2001年  b  110
2002年  b  120
2003年  b  140
2000年  a  130
2004年  a  150

並び替えをしたい列が2つ

1つ目のカラムを昇順で並び替えの上で、2つ目のカラムを降順で並び替えをする。

in

df = df.sort_values(by=['A','B'],ascending=[True,False])

print(df)

out

             A   B
2004年  a  150
2000年  a  130
2003年  b  140
2002年  b  120
2001年  b  110

全引数解説

全引数のソースコード

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')

 

・by:[必須]

説明:並び替えをしたカラム名

 

・ascending:[任意]

説明:昇順降順の設定。Trueは昇順、Falseは降順。

渡す値:True , False

デフォルト:True

 

・axis:[任意]

説明:行で並び替えをするか、列で並び替えをするか。

渡す値:「0 か ‘index’」,「1 or ‘columns’」

デフォルト:「0」

 

・inplace:[任意]

説明:元のデータフレームを置き換えるかどうか。Trueが変更する、Falseは変更しない

渡す値:True , False

デフォルト:False

 

・kind[任意]

説明:並び替えをするアルゴリズムを選択

渡す値:‘quicksort’ , ‘mergesort’ , ‘heapsort’

デフォルト:‘quicksort’

 

・na_position::[任意]

説明:ヌル値やNanがあった場合に、その値を最初に持ってくるか、最後に持ってくるか。

渡す値:‘first’ , ‘last’

デフォルト:‘last’

引数の補足

inplaceについて

変数に代入をしなくても、元のデータフレームが置き換わっている。

in[4]

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
                              'B': [130 , 110 , 120 , 140 , 150]},
                              index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df.sort_values(by=['A','B'],inplace=True,ascending=[True,False]) #変数に代入していない

print(df)

Aカラムが昇順、Bカラムが降順に置き換わっている。

out[4]

             A   B
2004年  a  150
2000年  a  130
2003年  b  140
2002年  b  120
2001年  b  110

axisについて

'A'というカラムが文字列型、'B'というカラムがint型といったような場合だと並び替えができないので注意。

 

in[5]

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
                              'B': [130 , 110 , 120 , 140 , 150]},
                              index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df.sort_values(by="2000年",axis=1)

エラーになった。

out[5]

TypeError: '<' not supported between instances of 'numpy.ndarray' and 'str'

 

'A'もint型にしてデータフレーム作成。

in[6]

df = pd.DataFrame({'A': [160, 180, 200, 190, 170],
          'B': [130 , 110 , 120 , 140 , 150]},
          index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

 

print(df)

out[6]

     A      B
2000年  160  130
2001年  180  110
2002年  200  120
2003年  190  140
2004年  170  150'

 

'2003年'の行を昇順で並び替え。

in[7]

df.sort_values(by="2003年",axis=1, ascending=True)

行の中で並び替えができた。

out[7]

       B      A
2000年  130  160
2001年  110  180
2002年  120  200
2003年  140  190
2004年  150  170