1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[メモ] pandasのunstack

Posted at

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)

dfとして
Screenshot from 2020-10-10 00-35-09.png
こんな感じのものが得られるはずです。

ここで、

  • ts: タイムスタンプ
  • wday: 曜日
  • item: 商品(ID)
  • qty: 個数

を何かのECサイトのログのようなものを想定します。

やりたいこと

ここで、曜日ごとにどのアイテムが合計どれだけ売れるのかをみたいとします。本当はtsで期間を指定するのがふつうですが、それはおいておいて、次のようなことをすると思います。

df.groupby(['wday', 'item']).qty.sum()

すると次のようなものが得られます。
Screenshot from 2020-10-10 00-40-42.png
悪くはないのですが、もう一つ見にくいです。ここで、unstackをすると、

df.groupby(['wday', 'item']).qty.sum().unstack()

Screenshot from 2020-10-10 00-42-01.png
となりました。

参考

くわしくはpandasの公式ドキュメントにしっかりと書いてあります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?