サイトアイコン アマチュア無線局JS2IIU

【Pandas】データの形を自在に操る!pivotメソッドでロング→ワイド変換

こんにちは、JS2IIUです。
今回は、Pythonのデータ分析ライブラリpandasデータの形を変換する強力なメソッド、pivotについて解説します。pivotメソッドは、meltメソッドとは逆に、ロングフォーマットのデータをワイドフォーマットに変換する際に非常に役立ちます。この記事では、pivotの基本的な使い方から、実際のデータを使ったサンプルまで、具体例を通して丁寧に説明していきます。今回もよろしくお願いします。

1. pivotメソッドって何?

pivotメソッドは、pandasのDataFrameを「ロングフォーマット」から「ワイドフォーマット」へ変換するためのメソッドです。前回の記事ではmeltメソッドでワイドからロングへの変換を学びましたが、pivotはその逆変換を行います。

例えば、以下のような月別・商品別の売上データ(ロングフォーマット)があるとします。

MonthProductSales
JanProductA150
FebProductA160
JanProductB90
FebProductB95
JanProductC120
FebProductC125

これをpivotメソッドで変換すると、以下のようなワイドフォーマットのデータになります。

MonthProductAProductBProductC
Jan15090120
Feb16095125

このように、pivotメソッドを使うと、データの見方を変えたいときに非常に便利です。

2. pivotメソッドの使い方

pivotメソッドのシグネチャ:

Python
DataFrame.pivot(*, columns, index=<no_default>, values=<no_default>)

pivotメソッドの基本的な使い方は以下の通りです。

Python
df_wide = df_long.pivot(index='行インデックスとなる列', columns='列インデックスとなる列', values='値となる列')

3. 実践!pivotでデータフォーマット変換

それでは、実際にpivotメソッドを使ってデータフォーマットを変換してみましょう。ここでは、月別・商品別の売上データ(ロングフォーマット)をワイドフォーマットに変換します。

3.1 ロングフォーマットのDataFrameを作成

まず、分析対象となる月別商品売上データ(ロングフォーマット)を作成します。

Python
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)
Plaintext
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    160

3.2 pivotを使ってワイドフォーマットに変換

次に、pivotメソッドを使って、このデータをワイドフォーマットに変換します。

Python
# 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)
Plaintext
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       150

Month列を行インデックス、Product列を列インデックス、Sales列を値として、ワイドフォーマットのデータに変換されました。

4. ロングフォーマットとワイドフォーマット:利点と使い所

ロングフォーマット

利点:

使い所:

ワイドフォーマット

利点:

使い所:

まとめ

特徴ロングフォーマットワイドフォーマット
データの可視化容易(特に複数カテゴリ)特定の項目の比較は容易
データの分析集計処理と組み合わせやすい特定のセルへのアクセスが容易
データ容量場合によっては削減可能繰り返しが多いと冗長になる場合がある
直感的な理解やや慣れが必要人間にとって理解しやすい
データベース正規化された形式として扱いやすい場合によっては正規化が必要

多くの場合、データ分析や可視化の前処理にはロングフォーマットが適しており、人間が閲覧・編集する際にはワイドフォーマットが適しています pandasmeltpivotを使いこなして、状況に応じて適切なフォーマットを選択しましょう!

5. まとめ

pandaspivotメソッドは、ロングフォーマットのデータをワイドフォーマットに変換する際に非常に役立ちます。meltメソッドと対になるメソッドであり、データ分析や可視化の前処理として、データの見方・集計方法を変えたい場合に力を発揮します。pivotメソッドを使いこなして、データ分析の幅を広げていきましょう!

meltメソッドについてはこちらの記事を参考にして下さい。

6. 参考情報

Pythonに関する書籍のです。

24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。

最後まで読んでいただきありがとうございました。

モバイルバージョンを終了