【Python】複数条件でソート!pandasでデータフレームを並び替える実践的なテクニック

データフレームを操作する際に、複数の条件でソートすることはよくあります。例えば、売上データを日付と商品名でソートする場合や、学生の成績を科目と点数でソートする場合などです。

Pythonのデータ分析ライブラリであるpandasを使えば、簡単に複数条件でのソートができます。本記事では、pandasを使ったデータフレームの複数条件ソートの方法とその重要性について説明します。

はじめに:複数条件でソートする方法とその重要性、pandasデータフレームでのソートの基本

複数条件でのソートは、単一条件でのソートよりも多くの情報を得られるため、データ分析において非常に重要です。pandasを使うことで、複数の列を指定してソートすることができます。

pandasでは、sort_values()sort_index()の2つのメソッドを使って、データフレームをソートすることができます。

基本的なソート方法:sort_values()を使った単一列のソート方法と昇順・降順の操作

まずは、sort_values()を使った単一列のソート方法を説明します。以下は、sort_values()を使って、データフレームを1つの列でソートする例です。

import pandas as pd
# データフレームの作成
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 20, 30, 35],
    'gender': ['F', 'M', 'M', 'M']
})
# age列で昇順にソート
df_sorted = df.sort_values('age', ascending=True)
print(df_sorted)

上記のプログラムを実行すると、以下のように表示されます。

      name  age gender
1      Bob   20      M
0    Alice   25      F
2  Charlie   30      M
3    David   35      M

この例では、sort_values()メソッドの引数に列名を指定して、
その列で昇順にソートしています。降順にソートする場合は、ascending=Falseと指定します。

次に、昇順と降順の操作方法について説明します。デフォルトでは、sort_values()は昇順でソートされますが、ascendingパラメータをFalseに設定することで降順にソートすることができます。

# age列で降順にソート
df_sorted = df.sort_values('age', ascending=False)
print(df_sorted)

上記のプログラムを実行すると、以下のように表示されます。

      name  age gender
3    David   35      M
2  Charlie   30      M
0    Alice   25      F
1      Bob   20      M

このように、sort_values()メソッドを使って、単一列で昇順・降順にソートすることができます。

複数条件でのソート:sort_values()に複数の列を指定し、複数条件でソートする方法

次に、sort_values()に複数の列を指定して、複数条件でのソートをする方法を説明します。以下は、sort_values()を使って、データフレームを2つの列でソートする例です。

# データフレームの作成
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 20, 30, 35],
    'gender': ['F', 'M', 'M', 'M']
})
# age列を優先し、次にname列で昇順にソート
df_sorted = df.sort_values(['age', 'name'], ascending=[True, True])
print(df_sorted)

上記のプログラムを実行すると、以下のように表示されます。

      name  age gender
1      Bob   20      M
0    Alice   25      F
2  Charlie   30      M
3    David   35      M

この例では、sort_values()メソッドの引数に列名をリストで指定して、その列で昇順にソートしています。複数の列を指定することで、同じ値の場合に次の列でソートすることができます。

ソートの優先順位の調整:複数条件ソート時のソート優先順位の変更方法

複数条件でのソートをする場合、ソートの優先順位を指定することができます。以下は、sort_values()を使って、データフレームを2つの列でソートする例です。

# データフレームの作成
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 20, 30, 35],
    'gender': ['F', 'M', 'M', 'M']
})
# age列を優先し、次にname列で昇順にソート
df_sorted = df.sort_values(['age', 'name'], ascending=[True, True])
print(df_sorted)

上記のプログラムを実行すると、以下のように表示されます。

      name  age gender
1      Bob   20      M
0    Alice   25      F
2  Charlie   30      M
3    David   35      M

この例では、sort_values()メソッドの引数に列名をリストで指定して、その列で昇順にソートしています。複数の列を指定することで、同じ値の場合に次の列でソートすることができます。

しかし、複数条件でのソートをする場合、優先順位を指定することができます。以下は、age列を優先し、次にgender列でソートする例です。

# age列を優先し、次にgender列で昇順にソート
df_sorted = df.sort_values(by=['age', 'gender'], ascending=[True, True])
print(df_sorted)

上記のプログラムを実行すると、以下のように表示されます。

      name  age gender
1      Bob   20      M
0    Alice   25      F
2  Charlie   30      M
3    David   35      M

この例では、sort_values()メソッドの引数にbyを指定して、優先順位を指定しています。優先順位を指定することで、複数条件でのソートをより細かく調整することができます。

インデックスに基づいたソート:sort_index()を使ったインデックスに基づくソート方法

最後に、sort_index()を使ったインデックスに基づくソート方法を説明します。以下は、sort_index()を使って、データフレームをインデックスでソートする例です。

# データフレームの作成
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 20, 30, 35],
    'gender': ['F', 'M', 'M', 'M']})
# インデックスを逆順にソート
df_sorted = df.sort_index(ascending=False)
print(df_sorted)

上記のプログラムを実行すると、以下のように表示されます。

      name  age gender
3    David   35      M
2  Charlie   30      M
1      Bob   20      M
0    Alice   25      F

この例では、sort_index()メソッドを使って、インデックスを逆順にソートしています。

まとめ:複数条件でソートする方法をマスターし、データフレーム操作をより実践的に行うポイント

本記事では、pandasを使ったデータフレームの複数条件ソートの方法について説明しました。以下は、まとめです。

  • 複数条件でのソートは、データ分析において非常に重要である。
  • pandasを使って、sort_values()sort_index()の2つのメソッドを使って、データフレームをソートすることができる。
  • 複数の列を指定して、複数条件でのソートをすることができる。
  • 優先順位を指定することで、複数条件でのソートをより細かく調整することができる。
  • インデックスに基づいたソートも、sort_index()を使って簡単に行うことができる。

複数条件でのソートは、データフレームを操作する際に非常に役立ちます。pandasを使って、簡単に複数条件でのソートができるため、ぜひ本記事を参考にして、データフレームの操作をより実践的に行ってください。