Pandas DataFrameのpivot_table関数: データ分析の強力なツール


pivot_table 関数の基本的な使い方

import pandas as pd

# データフレームを作成
df = pd.DataFrame({
    "A": ["a", "a", "b", "c", "c"],
    "B": [1, 2, 3, 4, 5],
    "C": ["X", "Y", "Z", "X", "Y"]
})

# pivot_table 関数を使ってピボットテーブルを作成
pivot_table = df.pivot_table(values="B", index=["A"], columns=["C"])

# ピボットテーブルを表示
print(pivot_table)

このコードを実行すると、以下のピボットテーブルが出力されます。

| C      | a  | b  | c  |
|-------|---|---|---|---|
| X      | 1.5 | NaN | 4.0 |
| Y      | 2.0 | NaN | 5.0 |
| Z      | NaN | 3.0 | NaN |

pivot_table 関数の引数

pivot_table 関数は、以下の引数を受け取ります。

  • dropna: 欠損値を含む行を削除するかどうか。デフォルトは True
  • margins: 集計結果の合計行・列を表示するかどうか。デフォルトは False
  • fill_value: 欠損値を埋める値。デフォルトは None
  • aggfunc: 集計方法を指定する関数。デフォルトは mean (平均)。
  • columns: 列に表示する列名。複数指定できます。
  • index: 行に表示する列名。複数指定できます。
  • values: 集計する列名。複数指定できます。

pivot_table 関数の応用例

  • 時間経過に伴う株価データを日付ごとに集計し、平均株価、騰落率などを分析する。
  • 売上データを顧客、商品、地域ごとに集計し、売上金額の平均、最大値、最小値などを表示する。

pivot_table 関数の詳細

pivot_table 関数に関する詳細は、以下のドキュメントを参照してください。

  • pivot_table 関数の引数とオプションを理解することで、より柔軟な分析が可能になります。
  • pivot_table 関数を使って、様々な集計結果を簡単に作成することができます。
  • pivot_table 関数は、データフレームのデータを効率的に分析するために非常に便利なツールです。


import pandas as pd

# データフレームを作成
df = pd.DataFrame({
    "顧客ID": ["A001", "A001", "A002", "A003", "A003"],
    "商品名": ["商品1", "商品2", "商品3", "商品1", "商品2"],
    "地域": ["関東", "関東", "関西", "東海", "東海"],
    "売上金額": [1000, 5000, 3000, 2500, 4200]
})

# pivot_table 関数を使ってピボットテーブルを作成
pivot_table = df.pivot_table(values="売上金額", index=["顧客ID", "商品名"], columns=["地域"], aggfunc={"売上金額": ["mean", "max", "min"]})

# ピボットテーブルを表示
print(pivot_table)
| 地域      | 顧客ID | 商品名 |       売上金額       |
|----------|---------|---------|-----------------------|
| 関東      | A001    | 商品1   | 3000.000000       | 3000.000000 | 3000.000000 |
|          |         | 商品2   | 5000.000000       | 5000.000000 | 5000.000000 |
| 関西      | A002    | 商品3   | 3000.000000       | 3000.000000 | 3000.000000 |
| 東海      | A003    | 商品1   | 2500.000000       | 2500.000000 | 2500.000000 |
|          |         | 商品2   | 4200.000000       | 4200.000000 | 4200.000000 |
import pandas as pd

# データフレームを作成
df = pd.DataFrame({
    "年齢": [20, 25, 30, 22, 27, 33],
    "性別": ["男性", "女性", "男性", "女性", "女性", "男性"],
    "質問1": ["はい", "いいえ", "どちらか", "はい", "どちらか", "いいえ"],
    "質問2": ["はい", "いいえ", "はい", "いいえ", "はい", "いいえ"]
})

# pivot_table 関数を使ってピボットテーブルを作成
pivot_table = df.pivot_table(index=["年齢", "性別"], columns=["質問1", "質問2"], aggfunc={"質問1": "count", "質問2": "count"})

# ピボットテーブルを表示
print(pivot_table)
| 質問1 | 質問2 | 性別 | 年齢 |
|-------|-------|---------|---------|
| count  | count  | 男性   | 20     | 1       |
|        |        |        | 25     | 1       |
|        |        |        | 30     | 1       |
|        |        |        | 33     | 1       |
|        |        | 女性   | 22     | 1       |
|        |        |        | 27     | 1       |
|        |        |        | 33     | 1       |


groupby と集計関数

最も基本的な代替方法は、groupby 関数と集計関数を使用する方法です。この方法は、シンプルな集計や、pivot_table 関数よりも柔軟な操作が必要な場合に適しています。

import pandas as pd

# データフレームを作成
df = pd.DataFrame({
    "A": ["a", "a", "b", "c", "c"],
    "B": [1, 2, 3, 4, 5],
    "C": ["X", "Y", "Z", "X", "Y"]
})

# groupby と集計関数を使って集計
result = df.groupby(["A", "C"])["B"].agg(["mean", "max", "min"])

# 結果を表示
print(result)

このコードは、pivot_table 関数を使った場合と同じ結果を出力します。

利点

  • pivot_table 関数よりも柔軟な操作が可能
  • シンプルで分かりやすい

欠点

  • コードが冗長になりやすい
  • 複雑なピボットテーブルを作成するには、複数のステップが必要

crosstab 関数

crosstab 関数は、カテゴリカルデータを集計してクロス集計表を作成する関数です。この関数は、pivot_table 関数よりもシンプルな構文でクロス集計表を作成できます。

import pandas as pd

# データフレームを作成
df = pd.DataFrame({
    "A": ["a", "a", "b", "c", "c"],
    "B": [1, 2, 3, 4, 5],
    "C": ["X", "Y", "Z", "X", "Y"]
})

# crosstab 関数を使ってクロス集計表を作成
result = pd.crosstab(df["A"], df["C"], df["B"], aggfunc="sum")

# 結果を表示
print(result)

利点

  • シンプルな構文でクロス集計表を作成できる

欠点

  • 集計方法を柔軟に指定できない
  • pivot_table 関数ほどの機能はない

SQL

データをデータベースに格納している場合は、SQLを使用して集計することもできます。SQLは、複雑な集計や結合操作を効率的に実行することができます。

SELECT A, C, SUM(B) AS B_sum
FROM my_table
GROUP BY A, C;

このSQLクエリは、pivot_table 関数を使った場合と同じ結果を出力します。

利点

  • 大規模なデータに対して高速に処理できる
  • 複雑な集計や結合操作を効率的に実行できる

欠点

  • データベースにデータを格納する必要がある
  • SQLの知識が必要

pivottable 関数の代替となるライブラリがいくつかあります。例えば、scikit-learnstatsmodels などのライブラリには、集計や分析に役立つツールが含まれています。

利点

  • pivottable 関数にはない機能を提供している場合がある
  • pandas との互換性がない場合がある
  • 習得に時間がかかる場合がある