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

こつこつPython

この記事の執筆・監修

キノコード
キノコード    

テクノロジーアンドデザインカンパニー株式会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
著書「あなたの仕事が一瞬で片付く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

 

未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト