TL;DR
multiIndexのseriesを見やすくするのにunstack
が便利でした。
group by後の処理
pandasのDataFrameは複数のcolumnでgroupby
をするとindexがMultiIndexというものになります。処理するのに少し詰まったので備忘録として、やったことを書きます。
環境
ここでは、
- Python == 3.8
- pandas == 1.1.3
で実行しています。
データの準備
たとえば、つぎのようなデータがあったとします。
import datetime
import random
import pandas as pd
item_list = ['A', 'A', 'A', 'B', 'C','C', 'D']
data_records = []
ts = datetime.datetime.now()
for _ in range(1000):
ts += datetime.timedelta(seconds=random.randint(200, 3600))
data_records.append({
'ts': ts,
'wday': ts.weekday(),
'item': random.choice(item_list),
'qty': random.randint(1, 5)
})
df = pd.DataFrame(data_records)
ここで、
- ts: タイムスタンプ
- wday: 曜日
- item: 商品(ID)
- qty: 個数
を何かのECサイトのログのようなものを想定します。
やりたいこと
ここで、曜日ごとにどのアイテムが合計どれだけ売れるのかをみたいとします。本当はts
で期間を指定するのがふつうですが、それはおいておいて、次のようなことをすると思います。
df.groupby(['wday', 'item']).qty.sum()
すると次のようなものが得られます。
悪くはないのですが、もう一つ見にくいです。ここで、unstack
をすると、
df.groupby(['wday', 'item']).qty.sum().unstack()
参考
くわしくはpandasの公式ドキュメントにしっかりと書いてあります。