행/열 구조를 바꿔서 요약된 표 만들기
0. 기본 개념
import pandas as pd
df = pd.DataFrame({
'name': ['홍길동', '홍길동', '강감찬', '강감찬'],
'subject': ['국어', '수학', '국어', '수학'],
'score': [90, 80, 70, 85]
})
1. 기본 개념을 피벗으로 변환
df.pivot(index='name', colmuns='subject', values='score')
index : 행에 올 값
columns : 열로 나눌 값
values : 셀 안에 채울 값
+) 주의 : pivot()은 중복 안 됨
동일한 (name, subject) 조합이 두 번 이상 있으면 에러 남 -> pivot_table() 사용하기
=> index, columns의 조합이 유일해야 한다.
< 해결 방법 2가지 >
1. pivot_table() 사용 (중복 자동 처리)
df.pivot_table(index='name', columns='subject', values='score', aggfunc='mean')
-> pivot_table()은 중복되면 mean, sum 등으로 자동 집계 가능 (실무에서는 이걸 씀)
2. 중복 제거 후 pivot()사용 (.drop_duplicates)
- 중복 조합을 사전에 확인 (.duplicated) : 몇 건 있는지 확인해서, 애초에 pivot()을 쓸 수 있는 상태인지 점검 가능
df.duplicated(subset=['name','subject']).sum()
df.drop_duplicates(subset=['name', 'subject'], keep='first') \
.pivot(index='name', columns='subject', values='score')
- keep = 'first' -> 첫 번째 것만 남긴다.
+ ) pivot_table은 다중인덱스도 가능
df_sales.pivot_table(index=['store'], columns=['month'], values='sales', aggfunc='sum',fill_value = 0)
-> fill_value = 0 : NaN을 0으로 대체
'Data Analysis' 카테고리의 다른 글
텍스트 마이닝, 형태소 분석, Word Cloud, Kkma, Jpype1, Konlpy, 대통령 연설문 분석하기 (0) | 2025.05.31 |
---|---|
데이터 정제 및 그래프 실습 (economics_anormaly.csv) (0) | 2025.05.29 |
데이터 병합 (merge / join / concat(단순 붙이기)) (0) | 2025.05.27 |
그룹별 통계 집계 (GroupBy & Aggregation) (0) | 2025.05.27 |
서브 플롯 subplot : 여러 개의 그래프를 하나의 창에 정리해서 보여줌 (0) | 2025.05.27 |