こんにちは、JS2IIUです。
今回は、Pythonのデータ分析ライブラリpandasでデータの形を変換する強力なメソッド、pivotについて解説します。pivotメソッドは、meltメソッドとは逆に、ロングフォーマットのデータをワイドフォーマットに変換する際に非常に役立ちます。この記事では、pivotの基本的な使い方から、実際のデータを使ったサンプルまで、具体例を通して丁寧に説明していきます。今回もよろしくお願いします。
1. pivotメソッドって何?
pivotメソッドは、pandasのDataFrameを「ロングフォーマット」から「ワイドフォーマット」へ変換するためのメソッドです。前回の記事ではmeltメソッドでワイドからロングへの変換を学びましたが、pivotはその逆変換を行います。
- ロングフォーマット: 特定の列(通常は「変数」と「値」)にデータがまとめられている形式
- ワイドフォーマット: 複数の種類のデータが複数の列にまたがって格納されている形式
例えば、以下のような月別・商品別の売上データ(ロングフォーマット)があるとします。
| Month | Product | Sales |
|---|---|---|
| Jan | ProductA | 150 |
| Feb | ProductA | 160 |
| Jan | ProductB | 90 |
| Feb | ProductB | 95 |
| Jan | ProductC | 120 |
| Feb | ProductC | 125 |
これをpivotメソッドで変換すると、以下のようなワイドフォーマットのデータになります。
| Month | ProductA | ProductB | ProductC |
|---|---|---|---|
| Jan | 150 | 90 | 120 |
| Feb | 160 | 95 | 125 |
このように、pivotメソッドを使うと、データの見方を変えたいときに非常に便利です。
2. pivotメソッドの使い方
pivotメソッドのシグネチャ:
DataFrame.pivot(*, columns, index=<no_default>, values=<no_default>)pivotメソッドの基本的な使い方は以下の通りです。
df_wide = df_long.pivot(index='行インデックスとなる列', columns='列インデックスとなる列', values='値となる列')df_long: 変換前のロングフォーマットのDataFrameindex: 行インデックスとして使用する列名(例:'Month')columns: 列インデックスとして使用する列名(例:'Product')values: 新しいDataFrameの値として使用する列名(例:'Sales')
3. 実践!pivotでデータフォーマット変換
それでは、実際にpivotメソッドを使ってデータフォーマットを変換してみましょう。ここでは、月別・商品別の売上データ(ロングフォーマット)をワイドフォーマットに変換します。
3.1 ロングフォーマットのDataFrameを作成
まず、分析対象となる月別商品売上データ(ロングフォーマット)を作成します。
import pandas as pd
# Create a long-format DataFrame
data = {
'Month': ['Jan', 'Jan', 'Jan', 'Feb', 'Feb', 'Feb', 'Mar', 'Mar', 'Mar', 'Apr', 'Apr', 'Apr', 'May', 'May', 'May', 'Jun', 'Jun', 'Jun'],
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductA', 'ProductB', 'ProductC', 'ProductA', 'ProductB', 'ProductC', 'ProductA', 'ProductB', 'ProductC', 'ProductA', 'ProductB', 'ProductC', 'ProductA', 'ProductB', 'ProductC'],
'Sales': [150, 90, 120, 160, 95, 125, 175, 110, 135, 180, 115, 140, 190, 125, 150, 200, 130, 160]
}
df_sales_long = pd.DataFrame(data)
print("Long-Format DataFrame:")
print(df_sales_long)Long-Format DataFrame:
Month Product Sales
0 Jan ProductA 150
1 Jan ProductB 90
2 Jan ProductC 120
3 Feb ProductA 160
4 Feb ProductB 95
5 Feb ProductC 125
6 Mar ProductA 175
7 Mar ProductB 110
8 Mar ProductC 135
9 Apr ProductA 180
10 Apr ProductB 115
11 Apr ProductC 140
12 May ProductA 190
13 May ProductB 125
14 May ProductC 150
15 Jun ProductA 200
16 Jun ProductB 130
17 Jun ProductC 1603.2 pivotを使ってワイドフォーマットに変換
次に、pivotメソッドを使って、このデータをワイドフォーマットに変換します。
# Transform to wide format using pivot
df_sales_wide = df_sales_long.pivot(index='Month', columns='Product', values='Sales')
print("\nWide-Format DataFrame:")
print(df_sales_wide)Wide-Format DataFrame:
Product ProductA ProductB ProductC
Month
Apr 180 115 140
Feb 160 95 125
Jan 150 90 120
Jun 200 130 160
Mar 175 110 135
May 190 125 150Month列を行インデックス、Product列を列インデックス、Sales列を値として、ワイドフォーマットのデータに変換されました。
4. ロングフォーマットとワイドフォーマット:利点と使い所
ロングフォーマット
利点:
- データの可視化: 特に
seabornなどのライブラリと相性が良く、複数カテゴリのデータを簡単に可視化できます。例えば、異なる商品の売上推移を1つのグラフで比較する際に便利です。 - データの分析:
groupby()などの集計処理と組み合わせやすく、特定の項目(例:商品ごと、月ごと)での統計量を簡単に算出できます。 - データ容量の削減: 同じ値が繰り返し現れるようなデータの場合、ワイドフォーマットよりもデータ容量を小さく抑えられる可能性があります。
- データベースの正規化: データベースに格納する際、正規化された形式として扱いやすい。
使い所:
- 複数のカテゴリにまたがるデータを比較・分析したい場合。
- データの可視化を簡単に行いたい場合。
- データベースに格納するための、正規化された形式が必要な場合。
ワイドフォーマット
利点:
- データの直感的な理解: 人間にとって直感的に理解しやすい形式です。表計算ソフトなどでデータを閲覧・編集する際に便利です。
- 特定の項目の比較: 特定の項目(例:ある月の各商品の売上)を横並びで比較しやすい。
- 特定のセルへのアクセス: 特定の行と列を指定して、特定の項目のデータに簡単にアクセスできます。
使い所:
- データを表計算ソフトなどで閲覧・編集したい場合。
- 特定の項目を横並びで比較したい場合。
- 特定の項目のデータに素早くアクセスしたい場合。
まとめ
| 特徴 | ロングフォーマット | ワイドフォーマット |
|---|---|---|
| データの可視化 | 容易(特に複数カテゴリ) | 特定の項目の比較は容易 |
| データの分析 | 集計処理と組み合わせやすい | 特定のセルへのアクセスが容易 |
| データ容量 | 場合によっては削減可能 | 繰り返しが多いと冗長になる場合がある |
| 直感的な理解 | やや慣れが必要 | 人間にとって理解しやすい |
| データベース | 正規化された形式として扱いやすい | 場合によっては正規化が必要 |
多くの場合、データ分析や可視化の前処理にはロングフォーマットが適しており、人間が閲覧・編集する際にはワイドフォーマットが適しています。 pandasのmeltとpivotを使いこなして、状況に応じて適切なフォーマットを選択しましょう!
5. まとめ
pandasのpivotメソッドは、ロングフォーマットのデータをワイドフォーマットに変換する際に非常に役立ちます。meltメソッドと対になるメソッドであり、データ分析や可視化の前処理として、データの見方・集計方法を変えたい場合に力を発揮します。pivotメソッドを使いこなして、データ分析の幅を広げていきましょう!
meltメソッドについてはこちらの記事を参考にして下さい。
6. 参考情報
- pandas.DataFrame.pivot – Official Documentation
- pandas.DataFrame.pivot_table – Official Documentation
- pandas.melt – Official Documentation
Pythonに関する書籍のです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。
最後まで読んでいただきありがとうございました。

