2021年8月5日木曜日

【pandas】sort_valuesによるデータフレームのソート

 データ分析用ライブラリpandasのデータフレームをソートする方法を説明する。データフレームをソートするにはsort_valuesを用いる。

 ライブラリpandasを使うにはインポートが必要。通常次のようにpdと略されてインポートされる。

import pandas as pd


1. sort_valuesの書式

 sort_valuesの書式は以下の通り。

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

bycolumnindexを指定するとその値でソートされる。ascendingはデフォルトがTrue。指定しないと昇順(小さい方から順番)に並べられる。Falseを指定すると降順(大きい方から順番)に並べられる。



2. データフレームのソートの例

 次のデータフレームをソートする場合。

import pandas as pd

data = [[25, 165, 65], [45, 178, 80], [32, 183, 72]]
name = ['Jane', 'Bob', 'Mike']
property = ['age', 'toll', 'weight']

df = pd.DataFrame(data=data, columns=property, index=name)
df

実行結果

      age  height  weight
Jane   25     165      65 
Bob    45     178      80 
Mike   32     183      72 


 columnindex'age'をbyに指定した場合。'age'の値でソートされる。ascendingは指定せずデフォルトのTrueのため昇順に並べられる。

df.sort_values(by=['age'])

実行結果

      age  height  weight
Jane   25     165      65 
Mike   32     183      72 
Bob    45     178      80 


 ascendingFalseを指定すると降順に並べられる。

df.sort_values(by=['age'], ascending=False))

実行結果

      age  height  weight
Bob    45     178      80 
Mike   32     183      72 
Jane   25     165      65 


 byに複数のindexを指定すると、一つ目のindexでソートされ、一つ目のindexが同じ値の場合に二つ目のindexでソートされる。
次のデータフレームをソートする場合。

import pandas as pd

data = [[25, 165, 65], [45, 178, 80], [32, 183, 72], [25, 162, 68], [33, 178, 69]]
name = ['Jane', 'Bob', 'Mike', 'Lisa', 'Ken']
property = ['age', 'toll', 'weight']

df = pd.DataFrame(data=data, columns=property, index=name)
df

実行結果

      age  height  weight
Jane   25     165      65 
Bob    45     178      80 
Mike   32     183      72 
Lisa   25     162      68
Ken    33     178      69


 一つ目のindexに'age'、二つ目のindexに'toll'を指定した場合

df.sort_values(by=['age', 'toll'])

実行結果

      age  height  weight
Lisa   25     162      68
Jane   25     165      65 
Mike   32     183      72 
Ken    33     178      69
Bob    45     178      80 


 一つ目のindexに'toll'、二つ目のindexに'age'を指定した場合

df.sort_values(by=['age', 'toll'])

実行結果

      age  height  weight
Lisa   25     162      68
Jane   25     165      65 
Ken    33     178      69
Bob    45     178      80 
Mike   32     183      72 


3. リファレンス

pandas > pandas.DataFrame.sort_value

使用したバージョン:Python 3.8.8/pandas 1.2.4

0 件のコメント:

コメントを投稿