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

Pandas
この記事は約10分で読めます。

こんにちは、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='値となる列')
  • df_long: 変換前のロングフォーマットのDataFrame
  • index: 行インデックスとして使用する列名(例:'Month'
  • columns: 列インデックスとして使用する列名(例:'Product'
  • values: 新しいDataFrameの値として使用する列名(例:'Sales'

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. ロングフォーマットとワイドフォーマット:利点と使い所

ロングフォーマット

利点:

  • データの可視化: 特にseabornなどのライブラリと相性が良く、複数カテゴリのデータを簡単に可視化できます。例えば、異なる商品の売上推移を1つのグラフで比較する際に便利です。
  • データの分析: groupby()などの集計処理と組み合わせやすく、特定の項目(例:商品ごと、月ごと)での統計量を簡単に算出できます。
  • データ容量の削減: 同じ値が繰り返し現れるようなデータの場合、ワイドフォーマットよりもデータ容量を小さく抑えられる可能性があります。
  • データベースの正規化: データベースに格納する際、正規化された形式として扱いやすい。

使い所:

  • 複数のカテゴリにまたがるデータを比較・分析したい場合。
  • データの可視化を簡単に行いたい場合。
  • データベースに格納するための、正規化された形式が必要な場合。

ワイドフォーマット

利点:

  • データの直感的な理解: 人間にとって直感的に理解しやすい形式です。表計算ソフトなどでデータを閲覧・編集する際に便利です。
  • 特定の項目の比較: 特定の項目(例:ある月の各商品の売上)を横並びで比較しやすい。
  • 特定のセルへのアクセス: 特定の行と列を指定して、特定の項目のデータに簡単にアクセスできます。

使い所:

  • データを表計算ソフトなどで閲覧・編集したい場合。
  • 特定の項目を横並びで比較したい場合。
  • 特定の項目のデータに素早くアクセスしたい場合。

まとめ

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

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

5. まとめ

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

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

6. 参考情報

Pythonに関する書籍のです。

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

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

コメント

タイトルとURLをコピーしました