본문 바로가기
PYTHON/python 함수

[python] 파이썬 crosstab

by 자유데이터 2020. 3. 19.
반응형

데이터 분석가의 길, 자유데이터입니다.

 

 

  • pandas crosstab을 이용하여 데이터 계산하기

crosstab은 범주형 변수를 기준으로 개수 파악이나 수치형 데이터를 넣어 계산할 때 사용한다.
아래의 예제를 보는게 더 이해가 빠를 것이다.

  1. crosstab 파라미터
  2. 기본
  3. 수치 계산하기
  4. 이름 바꾸기
  5. 정규화

 

1. crosstab 파라미터

기본 파라미터를 살펴보자.

하나씩 예제로 접근해보자.

 

2. 기본

먼저 데이터를 부른다.

import pandas as pd
import numpy as np

a = ['2/18', '2/18', '2/18', '2/18', '2/20', '2/20', '2/20', '2/20', '2/25', '2/25', '2/25']
b = ['철수', '철수', '철수', '영희', '영희', '영희', '영희', '철수', '영희', '영희', '철수']
c = ['치킨', '피자', '닭발', '치킨', '닭발', '짜장면', '피자', '치킨', '피자', '치킨', '피자']
d = [1,2,1,3,4,4,2,5,3,1,3]

data = pd.DataFrame({'날짜':a,'사람':b,'음식':c,'개수':d})
data

 

날짜별 어떤 사람이 어떤 음식을 먹었나 살펴보자.

pd.crosstab(index = [data.사람, data.음식], columns = data.날짜)

index에는 y축에 올 값,
columns에는 x축에 올 값을 넣어준다.

 

3. 수치 계산하기

데이터에 있는 수치형 데이터('개수')로 계산해보자.

pd.crosstab(index = [data.사람, data.음식], columns = data.날짜, values = data.개수)

ValueError: values cannot be used without an aggfunc.

만약 values만 사용했다면 에러가 났을 것이다.
values와 aggfunc는 세트

pd.crosstab(index = [data.사람, data.음식], columns = data.날짜, values = data.개수, aggfunc = np.sum)

NaN에 0을 채우려면 fillna 사용

pd.crosstab(index = [data.사람, data.음식], columns = data.날짜, values = data.개수, aggfunc = np.sum ).fillna(0)

총합을 보고 싶다면 margins 사용

pd.crosstab(index = [data.사람, data.음식], columns = data.날짜, values = data.개수, aggfunc = np.sum ,margins = True).fillna(0)

 

4. 이름 바꾸기

각 데이터에 이름을 바꾸려면 rownames, colnames, margins_name 사용

pd.crosstab(index = [data.사람, data.음식], columns = data.날짜, values = data.개수, aggfunc = np.sum ,margins = True,
           rownames = ["people","food"], colnames = ["date"], margins_name = "total").fillna(0)

 

5. 정규화

총 합을 1로 만들어 나머지 자동으로 계산하려면 normalize = True 사용

pd.crosstab(index = [data.사람, data.음식], columns = data.날짜, values = data.개수, aggfunc = np.sum ,margins = True,
           rownames = ["people","food"], colnames = ["date"], margins_name = "total", normalize = True).fillna(0)

반응형

'PYTHON > python 함수' 카테고리의 다른 글

[python] dataframe.where 함수  (0) 2021.02.10
[python] 날짜 변환에 유용한 isoformat 함수  (0) 2021.02.09
[python] tolist() 함수  (0) 2020.11.01
python get_dummies 함수  (0) 2020.01.30

댓글