반응형
- pandas crosstab을 이용하여 데이터 계산하기
crosstab은 범주형 변수를 기준으로 개수 파악이나 수치형 데이터를 넣어 계산할 때 사용한다.
아래의 예제를 보는게 더 이해가 빠를 것이다.
- crosstab 파라미터
- 기본
- 수치 계산하기
- 이름 바꾸기
- 정규화
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 |
댓글