Pandas df.pivot() 関数

Pandas 常用函数Pandas よく使う関数


df.pivot()DataFrame のメンバーメソッドであり、ピボットテーブルの作成に使用されます。。指定された行インデックス、列インデックス、値の列に基づいて、データを新しいレイアウト形式に再形成できます。

とpivot_table()とは異なり、pivot()集計操作をサポートしておらず、行インデックスと列インデックスの組み合わせが一意であることが必要です。そうでない場合はエラーが発生します。

単語の意味: pivot「回転」「ピボット」という意味で、ここではデータの「回転」による再形成を指し、Pivotテーブルのように行と列の次元を動的に切り替えることができます。


基本構文とパラメータ

df.pivot()DataFrame のインスタンスメソッドであり、ドット演算子で呼び出します。

構文形式

DataFrame.pivot(index=None, columns, values=None)

パラメータの説明

  • パラメータ: index
    • 型:列名、ラベル、ラベルリスト、または None。
    • 説明:新しい DataFrame の行インデックスとして使用する列。None の場合は、既存の行インデックスが使用されます。
  • パラメータ: columns
    • 型:列名またはラベル。
    • 説明:必須パラメータ。新しい DataFrame の列インデックスとして使用する列で、一意の値を列名に展開するために使用します。
  • パラメータ: values
    • 型:列名、ラベル、ラベルリスト、または None。
    • 説明:DataFrame を埋めるためのデータ列。指定しない場合は、index と columns 以外のすべての列が使用されます。

関数の説明

  • 戻り値:新しい DataFrame(ピボットテーブル)を返します。
  • 制限:index と columns の組み合わせに重複する値が存在する場合、ValueError がスローされます。この場合はpivot_table()を使用すると、自動的に集計が行われます。

実例

簡単なものから複雑なものまで一連の例を通して、df.pivot()の使い方を完全にマスターしましょう。

例1:基本用法 - シンプルなピボットテーブルの作成

実例

import pandas as pd

# 1. 売上データを作成(各行が商品-地域-売上額の組み合わせ)
sales = pd.DataFrame({
    'product': ['A', 'A', 'B', 'B', 'C', 'C'],
    'region': ['North', 'South', 'North', 'South', 'North', 'South'],
    'sales': [100, 150, 200, 180, 220, 250]
})

print("=== 元の売上データ ===")
print(sales)

# 2. df.pivot() を使用してピボットテーブルを作成
# 行インデックス:product、列インデックス:region、値:sales
pivot_result = sales.pivot(index='product', columns='region', values='sales')
print("n=== df.pivot() ピボットテーブル ===")
print(pivot_result)

実行結果の想定:

=== 原始销售数据 ===
  product  region  sales
0       A   North    100
1       A   South    150
2       B   North    200
3       B   South    180
4       C   North    220
5       C   South    250

=== df.pivot() 透视表 ===
region   North  South
product
A         100    150
B         200    180
C         220    250

コードの解説:

  1. 元データはロング形式であり、各行に1つの商品の特定地域での売上額が記録されています。
  2. pivot()product 列を行インデックス、region 列を列インデックス、sales を値として使用します。
  3. 結果は明確な2次元テーブルであり、異なる商品の異なる地域での販売状況を直感的に比較できます。

例2:複数列の値 - 複数の指標を同時にピボット

複数の数値列を同時にピボットして、より豊富なデータビューを得ることができます。

実例

import pandas as pd

# 1. 売上額と数量を含むデータを作成
sales = pd.DataFrame({
    'product': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'],
    'region': ['North', 'South', 'North', 'South', 'East', 'West', 'East', 'West'],
    'sales': [100, 150, 200, 180, 120, 130, 190, 210],
    'quantity': [10, 15, 20, 18, 12, 13, 19, 21]
})

print("=== 元のデータ ===")
print(sales)

# 2. 売上額のみをピボット
print("n=== 売上額ピボットテーブル ===")
sales_pivot = sales.pivot(index='product', columns='region', values='sales')
print(sales_pivot)

# 3. 売上額と数量をピボット(valuesを指定せず、すべての数値列を使用)
print("n=== 複数指標ピボット ===")
multi_pivot = sales.pivot(index='product', columns='region')
print(multi_pivot)

実行結果の想定:

=== 原始数据 ===
  product  region  sales  quantity
0       A   North    100         10
1       A   South    150         15
2       B   North    200         20
3       B   South    180         18
4       A   East    120         12
5       A   West    130         13
6       B   East    190         19
7       B   West    210         21

=== 销售额透视表 ===
region   East  North  South  West
product
A         120    100    150   130
B         190    200    180   210

=== 多指标透视 ===
         sales              quantity
region   East North South West  East North South West
product
A         120  100   150  130     12    10    15   13
B         190  200   180  210     19    20    18   21

コードの解説:

  • パラメータを指定しない場合、valuesindex と columns 以外のすべての列が使用されます。
  • 複数列のピボットでは複数層の列インデックスが生成され、1層目は元の列名、2層目は columns パラメータの値になります。
  • この方法により、複数の指標の異なる次元でのパフォーマンスを同時に比較しやすくなります。

例3:複数層インデックス - 複数の列を行インデックスとして使用

複数の列を使用して、階層化インデックスを持つピボットテーブルを作成できます。

実例

import pandas as pd

# 1. 年、四半期、商品情報を含むデータを作成
data = pd.DataFrame({
    'year': [2023, 2023, 2023, 2023, 2024, 2024, 2024, 2024],
    'quarter': ['Q1', 'Q1', 'Q2', 'Q2', 'Q1', 'Q1', 'Q2', 'Q2'],
    'product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
    'sales': [100, 150, 200, 180, 220, 250, 230, 270]
})

print("=== 元のデータ ===")
print(data)

# 2. 複数の列を行インデックスとして使用(リスト形式)
print("n=== 複数層行インデックスピボット ===")
pivot_multi = data.pivot(index=['year', 'quarter'], columns='product', values='sales')
print(pivot_multi)

# 3. インデックスをリセットして、通常のDataFrameに変換
print("n=== インデックスリセット後 ===")
pivot_reset = pivot_multi.reset_index()
print(pivot_reset)

実行結果の想定:

=== 原始数据 ===
   year quarter product  sales
0  2023      Q1       A    100
1  2023      Q1       B    150
值会抛出错误
- 这是 pivot() 和 pivot_table() 的关键区别:pivot() 要求数据唯一性,pivot_table() 会自动聚合重复值

コードの解説:

  • を使用することでindex=['year', 'quarter']複数層の行インデックスを持つピボットテーブルを作成できます。
  • この形式により、時間の次元で異なる商品のパフォーマンスを分析しやすくなります。
  • を使用すると、reset_index()階層化インデックスを通常の列に戻すことができます。

注意:元のデータに同じ index + columns の組み合わせが存在する場合、pivot()ValueError がスローされValueError: Index contains duplicate entriesます。この場合はpivot_table()を使用すると、重複する値を自動的に集計します。

Pandas 常用函数Pandas よく使う関数

その他の拡張