Search

Python 17. Pandas - pivot & pivot_table

Created at
2019/04/07
Updated at
2021/01/19
Tags
Keywords
Pandas
3 more properties
목차
피봇테이블(pivot table)이란, 데이터에서 두 개의 컬럼을 행/열 인덱스로 써서 데이터를 reshape한 테이블을 말한다. 기존의 데이터를 새로운 기준으로 집계해서 정리할 수 있는 방법이라고 이해하면 좋을 것 같다! 아래에서 실제 피봇테이블의 결과물을 보면 무슨 말인지 쉽게 이해가 될 수 있을 것이다. 여기에서는 간단한 실제 데이터를 이용해서 pandas에서 제공하는 pivotpivot_table 메서드를 통해 데이터를 새롭게 집계하는 방법을 알아보자.

1. Pivot

데이터 프레임의 컬럼 데이터에서 index, columns, values를 선택하여 데이터 프레임을 만드는 방법
syntax: df.pivot(index, columns, values)
유의할 점: 지정한 index와 columns를 기준으로 선택되는 데이터(values 파라미터에 해당)가 유일해야 한다! values가 2개 이상이면 에러 발생 → 따라서 pivot을 하기 전에 index와 column으로 사용할 컬럼을 기준으로 groupby를 먼저 해주어야 한다.
무엇이든 실제 사용 예를 보아야 이해가 쉽다! kaggle에서 제공하는 타이타닉 데이터를 사용해 간단하게 pivot을 실습해보자.
타이타닉 데이터: 타이타닉 승객 정보를 담은 데이터로, 생존여부를 예측하는 문제가 kaggle에 올라와 있음
예측 대상인 생존여부는 Survived 컬럼 (생존=1, 사망=0)
아래에서는 제공되는 데이터셋 중에서 train.csv만 사용한다.

1.1 성별과 객실등급에 따라 승객 수 집계하기

1.2 성별과 생존여부에 따라 승객 수 집계하기

2. Pivot table

pivot_table 메서드를 이용하면 한번에 groupby를 한 후에 pivot을 하는 것과 같은 결과를 얻을 수 있다.
syntax: pivot_table(values, index, columns, aggfunc='mean', fill_value=None, dropna=True, margins=False, margins_name='All')
pivot 메서드와 달리 values 파라미터가 먼저 들어간다는 점에 유의!
aggfunc: index와 columns로 선택되는 데이터가 유일하지 않으면 인수로 넣어주는 함수를 수행하여 대표값을 계산함
fill_value: NaN을 대체할 값
dropna: values가 전부 NaN인 행/열의 삭제 여부
margins: 모든 데이터를 분석한 결과(=마진)를 마지막 행/열에 붙일지 여부
margins_name: 마진 행/열의 이름

2.1 성별과 객실등급에 따라 승객 수 집계하기

2.2 성별과 생존여부에 따라 승객 수 집계하기

2.3 다중 index, 다중 columns 사용하기

2.4 pivot table의 행/열을 집계하는 Margin 컬럼 만들기

2.5 결측값의 처리 - fill_value / dropna

참고자료
패스트캠퍼스, ⟪데이터사이언스스쿨 8기⟫ 수업자료
pandas 0.25.0 documentation