[참고] pandas의 unstack

5282 단어 pandas파이썬

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

    이런 느낌의 것을 얻을 수 있을 것입니다.

    여기에서
  • ts: 타임스탬프
  • wday: 요일
  • item: 상품(ID)
  • qty: 개수

  • 뭔가 EC 사이트의 로그와 같은 것을 가정합니다.

    하고 싶은 일



    여기서, 요일마다 어느 아이템이 합계 얼마나 팔리는지를 보고 싶습니다. 사실은 ts 로 기간을 지정하는 것이 보통입니다만, 그것은 두고, 다음과 같은 일을 한다고 생각합니다.
    df.groupby(['wday', 'item']).qty.sum()
    

    그러면 다음과 같은 것을 얻을 수 있습니다.

    나쁘지는 않지만, 또 하나 보기 어렵습니다. 여기서 unstack
    df.groupby(['wday', 'item']).qty.sum().unstack()
    


    되었습니다.

    참고



    자세한 것은 pandas 공식 문서 에 제대로 써 있습니다.

    좋은 웹페이지 즐겨찾기