Pandasでデータ集計!pivot_table関数基本使い方

この記事では、Pythonのデータ解析ライブラリであるpandasのpivot_table関数について詳しく解説する。pivot_table関数は、行と列を指定して、集計を行うことができる強力な機能であり、ビジネスやデータ分析でよく使われている。本記事では、pivot_table関数の基本的な使い方や、総計を算出する方法、値の算出方法の指定、欠損値の処理などについて、実際のデータを使って解説する。

データの用意

pivot_table関数を説明するためのサンプルデータを用意する。ここでは、以下のような注文データを考える。

顧客名 商品名 注文数 注文日
A社 商品1 2 2021/01/01
A社 商品2 1 2021/01/02
A社 商品1 3 2021/01/03
B社 商品1 1 2021/01/02
B社 商品2 2 2021/01/02
B社 商品1 5 2021/01/04

これを以下のように読み込む。

colums = ['顧客名', '商品名', '注文数', '注文日']
values = [
['A社', '商品1', '2', '2021/01/01'],
['A社', '商品2', '1', '2021/01/02'],
['A社', '商品1', '3', '2021/01/03'],
['B社', '商品1', '1', '2021/01/02'],
['B社', '商品2', '2', '2021/01/02'],
['B社', '商品1', '5', '2021/01/04']
]
df = pd.DataFrame(values, columns=colums)
print(df)
   顧客名    商品名  注文数        注文日
0   A社   商品1     2  2021/01/01
1   A社   商品2     1  2021/01/02
2   A社   商品1     3  2021/01/03
3   B社   商品1     1  2021/01/02
4   B社   商品2     2  2021/01/02
5   B社   商品1     5  2021/01/04

基本的な使い方

pivot_table関数を使って、商品ごとの注文数の小計を算出する。

pt = pd.pivot_table(df, index="商品名", values="注文数", aggfunc="sum")
print(pt)
      注文数
商品名     
商品1     11
商品2      3
  • index引数に列名を指定することで、行になる列を指定できる。ここでは”商品名”列を指定している。
  • values引数に列名を指定することで、集計する値となる列を指定できる。ここでは”注文数”列を指定している。
  • aggfunc引数に集計方法を指定することで、集計方法を指定できる。ここでは”sum”(合計)を指定している。

引数marginsを使って総計を算出する方法

pivot_table関数に引数margins=Trueを指定することで、行と列の小計と総計を算出できる。

pt = pd.pivot_table(df, index="商品名", columns="顧客名", values="注文数", aggfunc="sum", margins=True)
print(pt)
顧客名     A社  B社  All
商品名               
商品1     5.0   6  11.0
商品2     1.0   2   3.0
All      6.0   8  14.0
  • columns引数に列名を指定することで、列になる列を指定できる。ここでは”顧客名”列を指定している。
  • margins引数にTrueを指定することで、すべての小計と総計を計算できる。

引数aggfuncを使って値の算出方法を指定する方法

pivot_table関数に引数aggfuncを指定することで、集計方法を指定できる。デフォルトでは”mean”(平均)が使われるが、”sum”(合計)など、任意の関数を指定することができる。

import numpy as np

pt = pd.pivot_table(df, index="商品名", columns="顧客名", values="注文数", aggfunc=np.max, margins=True)
print(pt)
顧客名     A社  B社  All
商品名               
商品1     3.0   5    5
商品2     1.0   2    2
All      3.0   5    5

aggfunc引数にnumpyの関数を指定することで、任意の関数を指定できる。ここではnp.maxを指定している。

引数dropnaを使って欠損値を除外する方法

pivot_table関数に引数dropna=Trueを指定することで、欠損値を除外して集計できる。

df2 = pd.DataFrame({
    "顧客名": ["A社", "A社", "B社", "B社"],
    "商品名": ["商品1", np.nan, "商品2", "商品1"],
    "注文数": [2, 3, 1, 5]
})
pt = pd.pivot_table(df2, index="顧客名", columns="商品名", values="注文数", aggfunc="sum", dropna=True)
print(pt)
商品名   商品1  商品2
顧客名          
A社     2.0  3.0
B社     5.0  1.0

欠損値を含む行は集計の対象外になるため、”商品1″と”商品2″の小計が算出されている。

コメント

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