【Python】pandasでデータを簡単に並び替え!基本的な使い方と便利なテクニック

はじめに

pandasはPythonで最もよく使われるデータ処理ライブラリの1つです。pandasを使うことで、テーブル形式のデータを簡単に扱うことができます。本記事では、pandasを使ったデータの並び替え方法について紹介します。

sort_values()関数:単一列や複数列のデータを昇順・降順で並び替える方法

sort_values()関数を使うことで、データフレームの単一列や複数列を昇順・降順で並び替えることができます。以下の例では、irisデータセットを使って、petal_length列を昇順に並び替えた結果を表示しています。

import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
df_sorted = df.sort_values(by='petal length (cm)')

print(df_sorted.head())

出力結果:

    sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
22                4.6               3.6                1.0               0.2
13                4.3               3.0                1.1               0.1
14                5.8               4.0                1.2               0.2
35                5.0               3.2                1.2               0.2
36                5.5               3.5                1.3               0.2

複数列のデータを並び替える場合は、by引数にリストを指定します。以下の例では、petal_length列を昇順に並び替えた後、同じ値の場合はpetal_width列を昇順に並び替えています。

df_sorted = df.sort_values(by=['petal length (cm)', 'petal width (cm)'])
print(df_sorted.head())

出力結果:

    sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
22                4.6               3.6                1.0               0.2
13                4.3               3.0                1.1               0.1
14                5.8               4.0                1.2               0.2
35                5.0               3.2                1.2               0.2
2                 4.7               3.2                1.3               0.2

sort_values()関数には、ascending引数を指定することで、昇順・降順を切り替えることができます。以下の例では、petal_length列を降順に並び替えています。

df_sorted = df.sort_values(by='petal length (cm)', ascending=False)
print(df_sorted.head())

出力結果:

     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
118                7.7               2.6                6.9               2.3
122                7.7               2.8                6.7               2.0
117                7.7               3.8                6.7               2.2
105                7.6               3.0                6.6               2.1
131                7.9               3.8                6.4               2.0

sort_index()関数:インデックスを基準にデータフレームを並び替える方法

sort_index()関数を使うことで、データフレームのインデックスを基準に並び替えることができます。以下の例では、petal_length列を昇順に並び替えた後、インデックスを基準に並び替えています。

df_sorted = df.sort_values(by='petal length (cm)')
df_sorted_by_index = df_sorted.sort_index()
print(df_sorted_by_index.head())

出力結果:

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2

並び替えのカスタマイズ:カスタムソート順やソート条件の指定方法

sort_values()関数を使うことで、カスタムソート順やソート条件を指定することもできます。以下の例では、petal length (cm)列をカスタムソート順で並び替えた結果を表示しています。

df_sorted = df.sort_values(by='petal length (cm)', key=lambda x: x.map({'setosa': 0, 'versicolor': 1, 'virginica': 2}))
print(df_sorted.head())

出力結果:

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2

また、sort_values()関数には、na_position引数を指定することで、欠損値をどこに配置するかを指定することもできます。以下の例では、petal_width列を降順に並び替えた後、欠損値を先頭に配置しています。

df_sorted = df.sort_values(by='petal width (cm)', ascending=False, na_position='first')
print(df_sorted.head())

出力結果:

     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
100                6.3               3.3                6.0               2.5
109                7.2               3.6                6.1               2.5
144                6.7               3.3                5.7               2.5
114                5.8               2.8                5.1               2.4
140                6.7               3.1                5.6               2.4

データフレームの再構築:並び替え後のインデックスや列名のリセット方法

sort_values()関数を使ってデータフレームを並び替えた後、インデックスや列名がずれてしまうことがあります。この場合は、reset_index()関数を使って、インデックスや列名をリセットすることができます。以下の例では、petal_length列を昇順に並び替えた後、reset_index()関数を使って、インデックスをリセットしています。

df_sorted = df.sort_values(by='petal length (cm)')
df_sorted = df_sorted.reset_index(drop=True)
print(df_sorted.head())

出力結果:

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                4.6               3.6                1.0               0.2
1                4.3               3.0                1.1               0.1
2                5.8               4.0                1.2               0.2
3                5.0               3.2                1.2               0.2
4                5.5               3.5                1.3               0.2

まとめ

本記事では、pandasを使ったデータの並び替え方法について紹介しました。sort_values()関数やsort_index()関数を使うことで、データフレームの単一列や複数列、インデックスを基準に、昇順・降順でデータを並び替えることができます。また、カスタムソート順や欠損値の配置方法を指定することもできます。さらに、データフレームを並び替えた後、reset_index()関数を使って、インデックスや列名をリセットすることもできます。

pandasの並び替え機能を使いこなすことで、データフレームの操作がよりスムーズになります。ぜひ本記事を参考にして、pandasの並び替え機能を使いこなしてください。