【Python】Pandasで複数列を条件に指定してDataFrameをソートする方法

目次

sort_valuesメソッドによるデータ並べ替えの基本

PandasのDataFrameにおいて、特定のカラムの値を基準にデータを並べ替えるには sort_values メソッドを使用します。単一の列だけでなく、複数の列をリスト形式で指定することで、第1優先、第2優先といった詳細なソート条件を設定することが可能です。

サンプルデータの準備

ここでは、社内のプロジェクト管理データを想定したサンプルを作成します。部署名、重要度、および予算額の3つのカラムを持つデータフレームを定義し、これらを組み合わせて並べ替えを行います。

import pandas as pd

# プロジェクトデータの定義
# 部署名(Dept)、優先度(Priority)、予算(Budget)
project_data = {
    "Dept": ["Sales", "Tech", "Sales", "HR", "Tech", "HR"],
    "Priority": [2, 5, 2, 1, 4, 1],
    "Budget": [500000, 1200000, 750000, 300000, 950000, 280000]
}

df = pd.DataFrame(project_data)
print("--- ソート前のデータ ---")
print(df)

複数列を指定した複雑なソート

sort_values メソッドの引数 by にカラム名のリストを渡すことで、複数のキーに基づいたソートが実行されます。また、引数 ascending に真偽値(True/False)のリストを渡すことにより、列ごとに昇順・降順を個別に制御できます。

実装コード

以下のコードでは、部署名(Dept)を昇順に並べ、同じ部署内では優先度(Priority)と予算(Budget)を降順に並べ替えます。

# 複数列を基準にソートを実行
# Dept: 昇順(True), Priority: 降順(False), Budget: 降順(False)
df_sorted = df.sort_values(
    by=["Dept", "Priority", "Budget"],
    ascending=[True, False, False]
)

print("\n--- ソート後のデータ ---")
print(df_sorted)

実行結果

上記のコードを実行すると、指定した優先順位に従って行が並べ替えられます。

--- ソート前のデータ ---
    Dept  Priority   Budget
0  Sales         2   500000
1   Tech         5  1200000
2  Sales         2   750000
3     HR         1   300000
4   Tech         4   950000
5     HR         1   280000

--- ソート後のデータ ---
    Dept  Priority   Budget
3     HR         1   300000
5     HR         1   280000
0  Sales         2   750000
2  Sales         2   500000
1   Tech         5  1200000
4   Tech         4   950000

パラメータの解説

  1. by: ソートの基準となるカラム名を、優先順位の高い順にリストで指定します。
  2. ascending: by で指定した各カラムに対応するソート順をリストで指定します。 True は昇順(小さい順)、 False は降順(大きい順)を意味します。

この手法を用いることで、カテゴリごとのランキング表示や、特定条件下での最大値・最小値の抽出が容易に行えるようになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次