Pandas データの並べ替えと集計

データの並べ替えと集計は、データ分析において非常に一般的かつ重要な操作であり、特に大規模データセットの分析では重要です。

並べ替えは特定の基準に従ってデータを整列させ、集計はデータを要約してさまざまな統計量を計算します。

Pandas は強力な並べ替え・集計機能を提供しており、分析者がデータを効率的に処理するのに役立ちます。

操作 方法 説明 よく使う関数/メソッド
並べ替え sort_values(by, ascending) 特定の列の値に基づいて並べ替えます。ascending昇順・降順を制御します df.sort_values(by='column')
並べ替え sort_index(axis) 行または列のインデックスに基づいて並べ替えます df.sort_index(axis=0)
グループ化と集計 groupby(by) 特定の列でグループ化した後、集計関数を適用します df.groupby('column')
集計関数 agg() 集計関数、例:sum()、mean()、count() 等 df.groupby('column').agg({'value': 'sum'})
多重集計 agg([func1, func2]) 同じ列に複数の集計関数を適用します df.groupby('column').agg({'value': ['mean', 'sum']})
グループ化後の並べ替え apply(lambda x: x.sort_values(...)) グループ化の後に並べ替えを行います df.groupby('column').apply(lambda x: x.sort_values(...))
ピボットテーブル pivot_table() ピボットテーブルを作成し、行と列に基づいてデータを集計します

一、データの並べ替え(Sorting)

並べ替えとは、データを特定の列の値に基づいて昇順または降順に並べることです。Pandas には、並べ替えを行うための2つの主要なメソッドがあります:sort_values()とsort_index()。

並べ替え方法

  • sort_values():列の値に基づいて並べ替えます。
  • sort_index():行または列のインデックスに基づいて並べ替えます。

例

操作 方法 説明 例
値で並べ替え df.sort_values(by, ascending) 指定された列(by)で並べ替え、ascending昇順・降順を制御します。デフォルトは昇順です df.sort_values(by='Age', ascending=False)
インデックスで並べ替え df.sort_index(axis) 行または列のインデックスで並べ替え、axis行・列のどちらで並べ替えるかを制御します df.sort_index(axis=0)

sort_values()例:

例

import pandas as pd

# サンプルデータ
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Salary': [50000, 60000, 70000, 80000]}

df = pd.DataFrame(data)

# "Age" 列の値に基づいて降順に並べ替える
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)

出力:

Name  Age  Salary
3    David   40   80000
2  Charlie   35   70000
1      Bob   30   60000
0    Alice   25   50000

sort_index()例:

例

# 行インデックスで並べ替える
df_sorted_by_index = df.sort_index(axis=0)
print(df_sorted_by_index)

出力:

      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000
3    David   40   80000

二、データの集計(Aggregation)

集計とは、データを特定のルールに従って集計することです。通常は、特定の列のデータに対して合計、平均、最大値、最小値などの操作を行います。Pandas はgroupby()データをグループ化し、さまざまな集計関数を適用するためのメソッドを提供しています。

集計方法

  • groupby():特定の列でグループ化します。
  • 集計関数:例えばsum(), mean(), count(), min(), max(), std()など。

例

操作 方法 説明 例
列ごとにグループ化して集計 df.groupby(by).agg() 指定された列(by)でグループ化し、agg()さまざまな集計関数を渡して、複数の操作を行うことができます df.groupby('Department').agg({'Salary': 'mean'})
多重集計関数の適用 df.groupby(by).agg([func1, func2]) 同じ列に複数の集計関数を適用して、複数の集計結果を返すことができます df.groupby('Department').agg({'Salary': ['mean', 'sum']})

groupby()例:

例

import pandas as pd

# サンプルデータ
data = {'Department': ['HR', 'Finance', 'HR', 'IT', 'IT'],
        'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
        'Salary': [50000, 60000, 55000, 70000, 75000]}

df = pd.DataFrame(data)

# 部署ごとにグループ化し、各部署の平均給与を計算する
grouped = df.groupby('Department')['Salary'].mean()
print(grouped)

出力:

Department
Finance    60000.0
HR         52500.0
IT         72500.0
Name: Salary, dtype: float64

多重集計関数の適用:

例

# 部署ごとにグループ化し、各部署の給与の平均値と合計を計算する
grouped_multiple = df.groupby('Department').agg({'Salary': ['mean', 'sum']})
print(grouped_multiple)

出力:

              Salary           
               mean    sum
Department                  
Finance    60000.0  60000
HR         52500.0  105000
IT         72500.0  145000

三、グループ化後の並べ替え

集計後のデータは、特定の列の値に基づいてさらに並べ替えることができ、特定のグループ内で最も重要な値を見つけることができます。

グループ化後の並べ替え

操作 方法 説明 例
グループ化後の並べ替え df.groupby(by).apply(lambda x: x.sort_values(by='col')) 各グループ内で特定の列の値に基づいて並べ替えます。 df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False))

グループ化後の並べ替えの例:

例

# 部署ごとにグループ化した後、給与の降順で並べ替える
grouped_sorted = df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False))
print(grouped_sorted)

出力:

    Department Employee  Salary
Department                     
Finance     Bob   60000
HR          Charlie  55000
HR          Alice  50000
IT          Eve   75000
IT          David  70000

四、ピボットテーブル

ピボットテーブル(Pivot Table)は特別な集計方法であり、行、列、集計関数を使用してデータをすばやく集計できます。Excel のピボットテーブルに似ています。

例

操作 方法 説明 例
ピボットテーブルの作成 df.pivot_table(values, index, columns, aggfunc) 指定された列を使用して行・列ごとに分類集計します。valuesは集計する値で、aggfuncは集計関数です df.pivot_table(values='Salary', index='Department', aggfunc='mean')

ピボットテーブルの例:

例

# pivot_table を使用して各部署の給与の平均値を計算する
pivot_table = df.pivot_table(values='Salary', index='Department', aggfunc='mean')
print(pivot_table)

出力:

Department
Finance    60000.0
HR         52500.0
IT         72500.0
Name: Salary, dtype: float64
その他の拡張