Pandasを使って任意の順番でデータを並び替える方法[Python]

はじめに

はじめに、PandasはPythonのデータ分析ライブラリであり、データの操作や処理に便利な機能を提供しています。Pandasの中でも、データフレームと呼ばれる表形式のデータを扱うことができます。この記事では、Pandasを使ってデータフレームを任意の順番で並び替える方法について紹介します。

Pandasとデータフレームの基本

Pandasのデータフレームは、行と列からなる表形式のデータを格納するためのオブジェクトです。データフレームを操作するためには、Pandasライブラリをインポートし、データを適切な形式でデータフレームに変換する必要があります。

import pandas as pd
# サンプルデータの作成
data = {'名前': ['山田', '佐藤', '鈴木'],
        '年齢': [25, 30, 35],
        '性別': ['男性', '女性', '男性']}
df = pd.DataFrame(data)
print(df)

上記のコードでは、PandasのDataFrame()関数を使用してデータフレームを作成し、print()関数でデータフレームを表示しています。以下のような結果が得られます。

   名前  年齢  性別
0  山田    25  男性
1  佐藤    30  女性
2  鈴木  3  5  男性

データフレームは行と列のインデックスを持ち、各列にはラベルが付けられています。このような形式でデータを扱うことで、様々な操作を行うことができます。

データのソート

データフレームの行を昇順や降順にソートする方法は簡単です。Pandasのsort_values()関数を使用することで、指定した列の値に基づいてデータをソートすることができます。

# 年齢で昇順にソート
df_sorted = df.sort_values('年齢')
print(df_sorted)

上記のコードでは、sort_values()関数を使用してデータフレームを「年齢」列の値で昇順にソートしています。結果は以下のようになります。

   名前  年齢  性別
0  山田    25  男性
1  佐藤    30  女性
2  鈴木    35  男性

デフォルトでは昇順にソートされますが、降順にソートする場合はascending=Falseを指定します。

# 年齢で降順にソート
df_sorted_desc = df.sort_values('年齢', ascending=False)
print(df_sorted_desc)

上記のコードでは、ascending=Falseを指定して「年齢」列の値で降順にソートしています。結果は以下のようになります。

   名前  年齢  性別
2  鈴木    35  男性
1  佐藤    30  女性
0  山田    25  男性

複数列によるソート

複数の列を使用してデータをソートする場合は、sort_values()関数に複数の列名をリストで指定します。指定した列の値で順番にソートされます。

# 年齢で昇順、名前で降順にソート
df_sorted_multi = df.sort_values(['年齢', '名前'], ascending=[True, False])
print(df_sorted_multi)

上記のコードでは、sort_values()関数に['年齢', '名前']ascending=[True, False]を指定しています。結果は以下のようになります。

   名前  年齢  性別
0  山田    25  男性
1  佐藤    30  女性
2  鈴木    35  男性

このように、複数の列を指定することで、より詳細な順序でデータをソートすることができます。

任意の順番でのソート

次に、任意の順序でデータをソートする方法について説明します。Pandasでは、sort_values()
# 数において、任意の順序でソートするためには、ソートの基準となる列の値をカテゴリ型(Categorical)として扱うことが有効です。具体的には、pd.Categorical()関数を使用して列をカテゴリ型に変換し、その順序を指定します。
# 以下の例では、”性別”列をカテゴリ型に変換し、”男性”を先に表示する順序を設定しています。

# "性別"列をカテゴリ型に変換
df['性別'] = pd.Categorical(df['性別'], categories=['男性', '女性'], ordered=True)
# "性別"でソート
df_sorted_custom = df.sort_values('性別')
print(df_sorted_custom)

上記のコードでは、”性別”列をpd.Categorical()関数を使用してカテゴリ型に変換し、その順序をcategories=[‘男性’, ‘女性’]で指定しています。そして、sort_values()関数を使って”性別”でソートしています。結果は以下のようになります。

   名前  年齢  性別
0  山田    25  男性
2  鈴木    35  男性
1  佐藤    30  女性

このように、カテゴリ型を使用することで、任意の順序でデータをソートすることができます。

カスタムソート

さらに、独自のルールに基づいてデータをソートする方法を紹介します。この場合、sort_values()関数にソートの基準となる列の値を数値または文字列ではなく、特定の関数によって計算される値として指定します。
以下の例では、”年齢”列の値を2で割った余りを基準にしてデータをソートしています。

# ソートの基準となる関数を定義
def custom_sort(x):
    return x % 2  # 2で割った余り


# カスタムソート
df_sorted_custom = df.sort_values('年齢', key=custom_sort)
print(df_sorted_custom)

上記のコードでは、custom_sort()関数を定義し、その関数をkeyパラメータとしてsort_values()関数に渡しています。結果は以下のようになります。

  名前  年齢  性別
1 佐藤   30   女性
0 山田   25   男性
2 鈴木   35   男性

この例では、”年齢”列の値を2で割った余りを計算し、その値をソートの基準として使用しています。このように、独自の関数を定義してソートの基準を指定することで、カスタムなソートが可能となります。

インデックスによるソート

最後に、インデックスを使用してデータをソートする方法を紹介します。Pandasのsort_index()関数を使用することで、データフレームのインデックスに基づいてソートすることができます。
以下の例では、データフレームのインデックスを逆順にソートしています。

# インデックスでソート
df_sorted_index = df.sort_index(ascending=False)
print(df_sorted_index)

上記のコードでは、sort_index()関数を使用してデータフレームのインデックスを逆順にソートしています。結果は以下のようになります。

   名前  年齢  性別
2  鈴木   35   男性
1  佐藤   30   女性
0  山田   25   男性

このように、sort_index()関数を使用することで、データフレームのインデックスに基づいてソートすることができます。

まとめ

以上で、Pandasを使って任意の順番でデータを並び替える方法について説明しました。

Pandasのsort_values()関数を使用することで、単一の列や複数の列、任意の順序やカスタムな基準に基づいてデータをソートすることができます。さらに、sort_index()関数を使用することで、インデックスに基づいたソートも行えます。

データの並び替えは、データ分析や可視化などの作業において重要なステップです。Pandasのソート機能を使いこなして、データを適切に整理し、必要な情報を抽出することができるようになりましょう。