Python × Excel

Python/Pandasでピボットテーブルを作る方法【Excelと比較】

2020-10-18

python-excel-pivot

本記事では、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結果1

それでは、ピボットテーブルの作り方を解説します。

まず、ピボットテーブルを使う時は、pivot_table()を使います。

この中にピボットテーブルの内容に応じて、次の引数を設定していくことになります。


valuesは、ピボットテーブルの横軸の項目になる列を指定します。リストで指定します。

indexは、縦軸の項目になる行です。この単位で値が集計されます。これもリストで指定します。

aggfunc='sum' は、集計の方法を示し、ここでは合計と指定しています。(デフォルトでは平均値になります。)

margins=Truemargins_name='合計' は行の一番下に合計のレコードを追加するものです。

 

Python/Pandasでピボットテーブルを作る方法(複数のvalues、index)

次は、複数のvaluesとindexを指定してみましょう。

Excelでのピボットテーブルのイメージとしては、こんな感じです。

エクセルピボット2

 

これを、Pythonで行うには次の通り書きます。

上のpivot_tablevaluesindexのリストに要素を追加した形となります。

df.pivot_table(values=['合計', '2021年度', '2022年度', '2023年度'], 
               index=['費目1', '費目2'], 
               aggfunc='sum', 
               margins=True, margins_name='合計')

結果は、次のようになり、Excelと同様のピボットテーブルが出来上がりました。

pivot結果2

 

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年度」列を引いた値を定義しています。

これによって、ピボットテーブルに新しい列が追加されました。

pivot結果3

 

このように、ピボットテーブルもPandasの通常のデータフレームとして扱えるので、列の追加などが自由にできるのです。

 

Python/Pandasでピボットテーブルを加工する方法(3桁区切りカンマを入れる)

最後にピボットテーブルのデータ加工として、数値に3桁区切りのカンマを入れる方法をご紹介します。

上で作ったpivotに、おまじないのようにapplymap('{:,.0f}'.format)と書きます。

pivot.applymap('{:,.0f}'.format)

結果は次の通りです。

pivot結果4

 

書き方を理解するには、applymap関数やformat関数の知っている必要がありますが、使う分には、最後にapplymap('{:,.0f}'.format)をつけるだけと覚えていれば差し支えないです。

 

 

以上、Excelと比較しつつ、Python/Pandasでピボットテーブルを作し、加工する方法を説明してきました。

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

 

 

よく読まれている記事

se-shikaku 1

  社内SEになるには資格って必要?社内SEでキャリアップするときにおすすめの資格は? 回答としては、 社内SEは、対人スキル、実務での対応力や最新情 ...

社内SEの仕事内容 2

  社内SEってどんな仕事なんだろ~ 検索しても転職サイトの記事ばかりでよく分からない・・   確かにそうですね。。実経験を基に、社内SE( ...

side-work-trial 3

  コロナで会社の経営も不安。。個人でお金稼ぎたいな~ 今、こう考えるサラリーマン、OLの方はごまんといると思います。   僕は、本業では社 ...

adsense-pass 4

【3記事で一発合格】Google AdSense申請に合格したブログ情報 こんにちは、いなサラ(@いなサラ|田舎の情シスサラリーマン)です。 2019年10月5 ...

-Python × Excel

© 2020 inasala note