本記事では、Python/Pandasでピボットテーブル(pivot_table)を作成し加工(列の追加、3桁区切りカンマの追加)する方法をご紹介します。
Pythonの実行環境
今回は、以下の実行環境でプログラムを実行しています。
・Python 3.7.6
・Jupyterlab 1.2.6
・Pandas:1.1.2
テストデータは、次のような予算管理表を使います。
ファイル名は「テストデータ.xlsx」で、シート名は「予算管理表」です。
■予算管理表
本記事で、利用するライブラリはPandasです。
そして、テストデータの予算管理表をdfとして読み込んでおきます。
import pandas as pd
df = pd.read_excel('テストデータ.xlsx', sheet_name = '予算管理表')
※本記事では、Pythonのコードの下のコメントアウトは、出力結果を示しています。
Python/Pandasでピボットテーブルを作る方法【Excelと比較】
ピボットテーブルは、ある列の特定の値の単位で、他の列の値を集計するテーブルです。
言葉で書いてもイメージしづらいかもしれません。
テストデータを基にすると、Excelでは、次のようにピボットテーブルを作れます。
Pythonでは、上のピボットテーブルは次のよう書きます。
df.pivot_table(values=['合計'],
index=['費目1'],
aggfunc='sum',
margins=True, margins_name='合計')
結果は次のようになり、上のExcelと同じピボットテーブルが出来上がります。
それでは、ピボットテーブルの作り方を解説します。
まず、ピボットテーブルを使う時は、pivot_table()を使います。
この中にピボットテーブルの内容に応じて、次の引数を設定していくことになります。
・valuesは、ピボットテーブルの横軸の項目になる列を指定します。リストで指定します。
・indexは、縦軸の項目になる行です。この単位で値が集計されます。これもリストで指定します。
・aggfunc='sum' は、集計の方法を示し、ここでは合計と指定しています。(デフォルトでは平均値になります。)
・margins=True と margins_name='合計' は行の一番下に合計のレコードを追加するものです。
Python/Pandasでピボットテーブルを作る方法(複数のvalues、index)
次は、複数のvaluesとindexを指定してみましょう。
Excelでのピボットテーブルのイメージとしては、こんな感じです。
これを、Pythonで行うには次の通り書きます。
上のpivot_tableのvaluesとindexのリストに要素を追加した形となります。
df.pivot_table(values=['合計', '2021年度', '2022年度', '2023年度'],
index=['費目1', '費目2'],
aggfunc='sum',
margins=True, margins_name='合計')
結果は、次のようになり、Excelと同様のピボットテーブルが出来上がりました。
Python/Pandasでピボットテーブルを加工する方法(列の追加)
ここまでは、Pythonでのピボットテーブルの作成方法についてみてきました。
次は、ピボットテーブルの加工、その中でも列の追加を説明します。
例えば、テストデータの「2021年度」列と「2022年度」列の差額を確認したいとします。
この場合は、次のようにピボットテーブルに差額の列を追加します。
pivot = df.pivot_table(values=['合計', '2021年度', '2022年度', '2023年度'],
index=['費目1', '費目2'],
aggfunc='sum',
margins=True, margins_name='合計')
pivot['差額(2021-2022年度)'] = pivot['2022年度'] - pivot['2021年度']
pivot
まずは、上で作ったピボットテーブルをpivotと定義します。変数名はなんでも大丈夫です。
次に、pivotに新しい列を指定して、「2022年度」列から「2021年度」列を引いた値を定義しています。
これによって、ピボットテーブルに新しい列が追加されました。
このように、ピボットテーブルもPandasの通常のデータフレームとして扱えるので、列の追加などが自由にできるのです。
Python/Pandasでピボットテーブルを加工する方法(3桁区切りカンマを入れる)
最後にピボットテーブルのデータ加工として、数値に3桁区切りのカンマを入れる方法をご紹介します。
上で作ったpivotに、おまじないのようにapplymap('{:,.0f}'.format)と書きます。
pivot.applymap('{:,.0f}'.format)
結果は次の通りです。
書き方を理解するには、applymap関数やformat関数の知っている必要がありますが、使う分には、最後にapplymap('{:,.0f}'.format)をつけるだけと覚えていれば差し支えないです。
以上、Excelと比較しつつ、Python/Pandasでピボットテーブルを作し、加工する方法を説明してきました。
最後まで読んでいただき、ありがとうございました。