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'], 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]) |
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'], 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'], |
エラーになった。
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],
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 |