Python_pivot_table
피봇 테이블 함수 : pivot_table()
피봇 테이블(pivot table)이란 데이터 열 중에서 두 개의 열을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회하여 펼쳐놓은 것을 말한다.
Pandas는 피봇 테이블을 만들기 위한 pivot 메서드를 제공한다. 첫 번째 인수로는 행 인덱스로 사용할 열 이름, 두 번째 인수로는 열 인덱스로 사용할 열 이름, 그리고 마지막으로는 데이터로 사용할 열 이름을 넣는다. Pandas는 지정된 두 열을 각각 행 인덱스와 열 인덱스로 바꾼 후 행 인덱스의 라벨 값이 첫 번째 키의 값과 같고 열 인덱스의 라벨 값이 두 번째 키의 값과 같은 데이터를 찾아서 해당 칸에 넣는다. 만약 주어진 데이터가 존재하지 않으면 해당 칸에 NaN값을 넣는다.
pivot_table() 함수의 기본 구성요소
- 행 인덱스 : index
- 열 인덱스 : columns
- 데이터 값 : values
- 데이터 집계함수 : aggfunc
각 구성요소에 적용할 데이터프레임의 열을 각각 함수의 인자로 전달한다. 4가지 구성요소를 적절히 입력하고 피벗테이블을 생성해보자. pivot_table은 세로 데이터를 가로 데이터로 변경해주는 역할을 한다. 먼저 테스트용 DataFrame을 생성하자.
테스트용 DataFrame
import pandas as pd
dt = pd.DataFrame({
'date': [20201201, 20201201, 20201201, 20201201, 20201202, 20201202, 20201202, 20201202, 20201203, 20201203, 20201203, 20201203],
'item_id': [1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2],
'item_name': ['a', 'a', 'b', 'b', 'a', 'a', 'b', 'b', 'a', 'a', 'b', 'b'],
'price': [1000, 1100, 10000, 10010, 1100, 1070, 10500, 10700, 1050, 950, 10300, 1150]
})
dt
이 데이터는 각 item들의 일자별 가격정보를 담고 있다. a와 b 두 종류의 아이템이 있으며 총 3일간의 가격 변화 데이터이다. 또한 위 데이터는 날짜 컬럼인 data 컬럼이 존재하며 이 날짜는 위에서 아래로 내려가며 점점 증가한다.
근데 만약 각각의 날짜를 컬럼으로 하여 각 아이템들의 날짜별 평균 가격을 알고 싶으면 어떻게 해야 할까? 다음처럼 pivot_table method를 이용하면 날짜가 컬럼이 되며 가로 데이터로 바뀌었다.
각 아이템들의 날짜별 평균 가격
pdf = pd.pivot_table(df, # 피벗할 데이터프레임
index = ['item_id', 'item_name'], # 행 위치에 들어갈 열
columns = 'date', # 열 위치에 들어갈 열
values = 'price', # 데이터로 사용할 열
aggfunc = 'mean', # 데이터 집계함수
dropna = False) # 결측치 출력여부
pdf
하나의 예시를 더 들어보자. 새로운 데이터프레임을 생성하자.
테스트용 DataFrame2
df2 = pd.DataFrame({
'반' : [1, 1, 1, 1, 2, 2, 2, 2],
'성별' : ['남', '남', '여', '여', '남', '남', '여', '여'],
'전공' : ['이과', '이과', '이과', '문과', '문과', '문과', '문과', '이과'],
'국어' : [90, 80, 85, 95, 100, 85, 95, 90],
'수학' : [88, 96, 92, 84, 80, 92, 88, 100]})
df2
1. 반과 전공을 기준으로 그룹을 나누어 각 그룹의 국어 성적 평균을 조회한 예시
pdf2_1 = pd.pivot_table(df2,
values='국어',
index='반',
columns='전공',
aggfunc=np.mean)
pdf2_1
2. 위의 테이블에서 수학 성적의 평균도 추가로 같이 조회한 예시
pdf2_2 = pd.pivot_table(df2,
values=['국어', '수학'],
index='반',
columns='전공',
aggfunc=np.mean)
pdf2_2
3. 위의 테이블에서 인덱스에 성별 정보도 추가하여 조회한 예시
pdf2_3 = pd.pivot_table(df2,
values=['국어', '수학'],
index=['반', '성별'],
columns='전공',
aggfunc=np.mean)
pdf2_3
4. 위의 테이블에서 성별 정보를 인덱스가 아닌 컬럼에 추가하여 조회한 예시
pdf2_4 = pd.pivot_table(df2,
values=['국어', '수학'],
index='반',
columns=['전공', '성별'],
aggfunc=np.mean)
pdf2_4
5. 위의 테이블에서 평균에 표준편차 정보도 얻기 위해 aggfunc 인자에 원하는 연산을 추가하여 조회한 예시
pdf2_5 = pd.pivot_table(df2,
values=['국어', '수학'],
index='반',
columns=['전공', '성별'],
aggfunc=[np.mean, np.std])
pdf2_5
출처 : https://cosmosproject.tistory.com/29
Python Pandas : pandas.pivot_table (pivot, 세로 데이터를 가로 데이터로 변경)
pandas.pivot_table pivot_table은 세로 데이터를 가로 데이터로 변경해주는 역할을 합니다. 먼저 테스트용 DataFrame을 생성합시다. import pandas as pd dict_1 = { 'dt': [20201201, 20201201, 20201201, 20201..
cosmosproject.tistory.com
4.7 피봇테이블과 그룹분석 — 데이터 사이언스 스쿨
.ipynb .pdf to have style consistency -->
datascienceschool.net
출처 : https://jimmy-ai.tistory.com/220
[Pandas] 파이썬 피벗테이블 생성 : pd.pivot_table 함수 사용법 정리
파이썬 판다스 pivot_table 함수 사용 예제 파이썬 pandas 모듈의 pd.pivot_table 함수로 피벗테이블을 원하는대로 생성하는 방법을 values, index, columns, fill_value 및 aggfunc 인자의 기능을 위주로 정리해..
jimmy-ai.tistory.com