개발로그필름
[데이터 TIL] pivot_table() 본문
📌 1️⃣ pivot_table()이란?
pivot_table()은 Pandas에서 제공하는 강력한 데이터 분석 도구
쉽게 말하면, 엑셀의 피벗 테이블과 같은 기능을 수행하는 함수
• 행(index)과 열(columns)을 기준으로 데이터를 요약해서 정리해주는 도구
• 숫자 데이터를 그룹화하여 평균, 합계, 개수 등을 계산할 수 있음
📌 2️⃣ pivot_table() 기본 사용법
df.pivot_table(index='행 컬럼', columns='열 컬럼', values='값을 요약할 컬럼', aggfunc='집계함수')
-집계 함수는 mean, sum, count, max, min 등을 말한다
📌 3️⃣ pivot_table() 직접 사용
🎯 샘플 데이터
먼저 간단한 데이터프레임을 만들어봤다
import pandas as pd
# 샘플 데이터
data = {
'이름': ['철수', '영희', '민수', '수지', '철수', '영희', '민수', '수지'],
'과목': ['수학', '수학', '수학', '수학', '영어', '영어', '영어', '영어'],
'점수': [90, 80, 85, 95, 85, 88, 92, 78],
'학년': [1, 1, 2, 2, 1, 1, 2, 2]
}
df = pd.DataFrame(data)
# 데이터 확인
print(df)
📌 출력 결과
이름 과목 점수 학년
0 철수 수학 90 1
1 영희 수학 80 1
2 민수 수학 85 2
3 수지 수학 95 2
4 철수 영어 85 1
5 영희 영어 88 1
6 민수 영어 92 2
7 수지 영어 78 2
✔ 학생별 수학, 영어 점수
✔ pivot_table()을 사용해서 데이터를 정리
📌 4️⃣ pivot_table() 예제 5가지
🎯 1) 과목별 평균 점수 구하기
df.pivot_table(index='과목', values='점수', aggfunc='mean')
📌 출력 결과
점수
과목
수학 87.5
영어 85.75
✔ 과목별 평균 점수를 구해서 보기 쉽게 정리
🎯 2) 학생별 과목 점수 정리
df.pivot_table(index='이름', columns='과목', values='점수', aggfunc='mean')
📌 출력 결과
과목 수학 영어
이름
민수 85 92
수지 95 78
영희 80 88
철수 90 85
✔ 학생별로 수학 & 영어 점수를 정리
✔ 한눈에 학생별 성적을 비교 가능
🎯 3) 학년별 과목 평균 점수 구하기
df.pivot_table(index='학년', columns='과목', values='점수', aggfunc='mean')
📌 출력 결과
과목 수학 영어
학년
1 85.0 86.5
2 90.0 85.0
✔ 1학년과 2학년의 과목별 평균 점수를 비교 가능
🎯 4) 과목별 학생 수 세기 (count 사용)
df.pivot_table(index='과목', values='점수', aggfunc='count')
📌 출력 결과
점수
과목
수학 4
영어 4
✔ 각 과목을 수강한 학생 수를 계산
🎯 5) 여러 개의 aggfunc 적용 (평균 + 최대 점수)
df.pivot_table(index='과목', values='점수', aggfunc=['mean', 'max'])
📌 출력 결과
mean max
과목
수학 87.5 95
영어 85.75 92
✔ 각 과목의 평균 & 최고 점수를 한 번에 볼 수 있다
📌 5️⃣ pivot_table()의 추가 옵션
✅ 1) NaN 값이 있을 때 채우기 (fill_value)
df.pivot_table(index='이름', columns='과목', values='점수', aggfunc='mean', fill_value=0)
✔ NaN 값이 있으면 0으로 채움
✅ 2) 여러 개의 index와 columns 사용
df.pivot_table(index=['학년', '이름'], columns='과목', values='점수', aggfunc='mean')
✔ 학년과 이름을 동시에 행으로 설정하여 상세한 분석 가능
✅ 3) 정렬 변경 (margins=True)
df.pivot_table(index='과목', values='점수', aggfunc='mean', margins=True)
📌 출력 결과
점수
과목
수학 87.5
영어 85.75
All 86.625
✔ 전체 평균(All)이 추가됨
'데이터분석가 > 데이터 TIL' 카테고리의 다른 글
[데이터 TIL] 그래프 한글 깨질 때 해결 방법 & 그래프 선명하게 하는 법 (0) | 2025.02.10 |
---|---|
[데이터 TIL] import warnings warnings.simplefilter('ignore') (0) | 2025.02.10 |
[데이터 TIL] Pair Plot에 대해 알아보자 (0) | 2025.02.07 |
[데이터 TIL] 히트맵을 알아보자 (1) | 2025.02.07 |
[데이터 TIL] 수치형 데이터와 범주형 데이터의 차이 (0) | 2025.02.07 |