LiJell's 성장기

15.python_stack_unstack_pivot_table 본문

Bigdata/파이썬_Python

15.python_stack_unstack_pivot_table

All_is_LiJell 2022. 1. 8. 13:30
반응형

Modified on Jan 08 2022
# -- coding: utf-8 --
"""
Created on Tue Dec 28 14:26:49 2021

@author: hanju
"""

15. stack, unstack, pivot_table

  • 자료구조 (데이터타입) 형태

  • long data(tidy data)

  • 각 속성을 컬럼으로 표현

  • 지점

  • A

  • B

  • C

-wide data(cross table : 교차표)

  • 하나의 속성을 갖는 데이터가 각 종류마다 서로 다른 컬럼으로 분리되어 나열함

  • A B C

  • 판매량

  • stack / unstack

1. stack

  • wide ->> long

2. unstack

  • long --> wide
import numpy as np
import pandas as pd 
from pandas import Series, DataFrame

pd.read_csv("./data/kimchi_test.csv", encoding = 'cp949')
kimchi = pd.read_csv("./data/kimchi_test.csv", encoding = 'cp949')
kimchi
'''
     판매년도  판매월    제품   판매처     수량       판매금액
0    2013    1  총각김치  대형마트  27916  233968900
1    2013    1  총각김치   백화점  11971   99796735
2    2013    1  총각김치   편의점   1603    2264200
3    2013    2  총각김치  대형마트  23057  194593960
4    2013    2  총각김치   백화점  11678  103106940
..    ...  ...   ...   ...    ...        ...
427  2016   11   무김치   백화점  16818  213580462
428  2016   11   무김치   편의점   1849    2718207
429  2016   12   무김치  대형마트  40806  351917006
430  2016   12   무김치   백화점  11877  139476205
431  2016   12   무김치   편의점   1890    2767080

[432 rows x 6 columns]
'''

# kimchi 데이터를 연도별, 제품별 수량의 총합
kimchi.groupby(['판매년도','제품'])['수량'].sum()
'''
판매년도  제품  
2013  무김치     420750
      열무김치    419045
      총각김치    483735
2014  무김치     447768
      열무김치    489359
      총각김치    551613
2015  무김치     540809
      열무김치    601661
      총각김치    742150
2016  무김치     733437
      열무김치    637934
      총각김치    634155
Name: 수량, dtype: int64
'''

kimchi 데이터를 연도별, 제품별 수량의 총합

df1 = kimchi.groupby(['판매년도','제품'])['수량'].sum()
df1

# 멀티인덱스
# 인덱스나 컬럼이 여러 레벨로 표현 
# 상위레벨 : 0, 하위레벨로 갈 수록 숫자 증가

df1.unstack()   # long ->> wide
'''
제품       무김치    열무김치    총각김치
판매년도                        
2013  420750  419045  483735
2014  447768  489359  551613
2015  540809  601661  742150
2016  733437  637934  634155
'''

df2 = df1.unstack()
df2.stack()     # wide ->> long
'''
판매년도  제품  
2013  무김치     420750
      열무김치    419045
      총각김치    483735
2014  무김치     447768
      열무김치    489359
      총각김치    551613
2015  무김치     540809
      열무김치    601661
      총각김치    742150
2016  무김치     733437
      열무김치    637934
      총각김치    634155
dtype: int64
'''


df1.unstack(level=0) # 상위레벨 (2013)
'''
판매년도    2013    2014    2015    2016
제품                                  
무김치   420750  447768  540809  733437
열무김치  419045  489359  601661  637934
총각김치  483735  551613  742150  634155
'''

df1.unstack(level=1)
'''
제품       무김치    열무김치    총각김치
판매년도                        
2013  420750  419045  483735
2014  447768  489359  551613
2015  540809  601661  742150
2016  733437  637934  634155
'''
pivot_table
  • 교차표 작성
kimchi.pivot_table(index = '판매월',   # index 방향에 배치할 컴럼명
                   columns = '판매처', # colums 방향에 배치할 컬럼명
                   values = '수량',    # 교차표에 작성할 값을 갖는 컬럼명 
                   aggfunc= 'sum'      # 그룹 함수 
                   )

예제 - kimchi 데이터를 이용하셔서, 연도별, 제품별 판매금액의 총 합을 교차표로 작성하세요.

kimchi
kimchi.pivot_table(index = '판매년도', columns = '제품', values = '판매금액', aggfunc = 'sum')
'''
제품           무김치        열무김치        총각김치
판매년도                                    
2013  3809133886  3416217894  4186789117
2014  4111403907  4392490590  5250364301
2015  5212738410  5859079408  7485159996
2016  6903506142  6627888927  6378374872
'''
반응형

'Bigdata > 파이썬_Python' 카테고리의 다른 글

17.python_datetime_expression  (0) 2022.01.10
16.python_NA_missing_duplicate_value  (0) 2022.01.10
14.python.drop_shift_rename  (0) 2022.01.07
13.python_merge_concat_join  (0) 2022.01.06
12.python_pandas_groupby  (0) 2022.01.05
Comments