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)
# サンプルデータ
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)
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)
# サンプルデータ
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)
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)
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)
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その他の拡張