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-learn
や statsmodels
などのライブラリには、集計や分析に役立つツールが含まれています。
利点
pivottable
関数にはない機能を提供している場合がある
pandas
との互換性がない場合がある- 習得に時間がかかる場合がある