데이터 분석에서 피벗 테이블(Pivot Table)은 데이터를 원하는 기준으로 재구성하고 요약하는 데 매우 유용한 도구입니다. 판다스(Pandas)에서는 pandas.pivot_table 함수를 사용해 엑셀과 같은 스프레드시트 형태의 피벗 테이블을 손쉽게 DataFrame으로 생성할 수 있으며, 하나가 아닌 여러 개의 열을 동시에 인덱스(index)로 지정하는 것도 가능합니다.
1. 라이브러리 불러오기
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
2. 예제용 DataFrame 생성하기
팀(Team) 관련 기록을 담은 DataFrame을 만들어 보겠습니다. 각 팀의 ID, 이름, 점수, 순위 정보를 포함합니다.
dataFrame = pd.DataFrame({
'Team ID': {0: 5, 1: 9, 2: 6, 3: 11, 4: 2, 5: 7},
'Team Name': {0: 'India', 1: 'Australia', 2: 'Bangladesh',
3: 'South Africa', 4: 'Sri Lanka', 5: 'England'},
'Team Points': {0: 95, 1: 93, 2: 42, 3: 60, 4: 80, 5: 55},
'Team Rank': {0: 'One', 1: 'Two', 2: 'Six',
3: 'Four', 4: 'Three', 5: 'Five'}
})
3. 여러 열로 피벗 테이블 생성하기
피벗 테이블을 만들 때 index 매개변수에 리스트 형태로 두 개 이상의 열을 전달하면, 해당 열들이 계층형(멀티 인덱스) 구조로 배치됩니다.
pd.pivot_table(dataFrame,
index=["Team ID", "Team Name", "Team Rank"])
위 코드는 팀 ID → 팀 이름 → 팀 순위 순서의 다중 열 인덱스를 가진 피벗 테이블을 생성하며, 나머지 수치형 열인 'Team Points'는 자동으로 집계(기본값: 평균)됩니다.
전체 예제 코드
import pandas as pd
# 팀 기록으로 DataFrame 생성
dataFrame = pd.DataFrame({
'Team ID': {0: 5, 1: 9, 2: 6, 3: 11, 4: 2, 5: 7},
'Team Name': {0: 'India', 1: 'Australia', 2: 'Bangladesh',
3: 'South Africa', 4: 'Sri Lanka', 5: 'England'},
'Team Points': {0: 95, 1: 93, 2: 42, 3: 60, 4: 80, 5: 55},
'Team Rank': {0: 'One', 1: 'Two', 2: 'Six',
3: 'Four', 4: 'Three', 5: 'Five'}
})
print("\n... Pivot ...")
# 여러 열을 인덱스로 사용하는 피벗 테이블
print(pd.pivot_table(dataFrame,
index=["Team ID", "Team Name", "Team Rank"]))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 세 개의 열이 계층적 인덱스로 정렬되고, 'Team Points' 값이 함께 표시되는 것을 확인할 수 있습니다.
... Pivot ...
Team Points
Team ID Team Name Team Rank
2 Sri Lanka Three 80
5 India One 95
6 Bangladesh Six 42
7 England Five 55
9 Australia Two 93
11 South Africa Four 60
정리
pandas.pivot_table의 index 인자에 열 이름을 리스트로 넘겨주면 손쉽게 다중 열 피벗 테이블을 만들 수 있습니다. 이 방식은 복잡한 데이터셋을 여러 기준으로 그룹화하여 요약할 때 특히 유용하며, values, aggfunc 등의 옵션을 추가로 활용하면 더욱 정교한 집계 분석이 가능합니다.