前回の記事で、ビン分割を使った価格帯別データの集計方法を紹介したが、今回は価格帯・年月の2軸でピボットテーブルを作り集計する方法を紹介する。

データフレームの加工

前回使ったサンプルデータフレームを利用する。

data_uriage.head()

まずは前回同様、cut関数を使って売上金額をビン分割する。

data_uriage['bin'] = pd.cut(data_uriage['売上'], [0, 50000, 100000, 200000, 300000, 500000, 750000, 1000000, 2000000, 3000000, 5000000])

次に、売上日を年月単位で集計するための加工を行う。

data_uriage['date'] = pd.to_datetime(data_uriage['売上日'])
data_uriage['年月'] = data_uriage['date'].dt.strftime('%Y%m')

これで新たに「年月」という列が作成された。

pivot_table関数を使ったデータの集計

まずは実際のコードを見てみよう。

pd.pivot_table(data_uriage, values='粗利率', index='bin', columns='年月', fill_value=0)

pivot_table関数は第一引数に対象となるデータフレームを、valuesに集計したい値、indexとcolumnsにそれぞれ軸となる列名を指定する。

オプションで指定しているfill_valueは、欠損値Nanの穴埋めを表す。
今回は0を指定しているので、欠損値は0で穴埋めされる。

このコードを実行すると、以下のようなピボットテーブルが出来上がる。

件数を集計する

粗利率を集計した場合、自動的に平均値が集計されたが、集計方法についてはaggfuncオプションで変更することができる。

例えば売上件数をピボットテーブルで表したい時は、以下のようにaggfuncにcountを指定すれば良い。

pd.pivot_table(data_uriage, values='売上', index='bin', columns='年月', aggfunc='count', fill_value=0)