반응형
데이터프레임으로 가장 많이 변환하여 사용하는 것으로 피봇테이블이 있습니다.
다양하게 통계성 데이터를 만들어 볼 수 있는데 결과값을 보고용으로 그대로 사용하기에는 깔끔하지 않은 경우가 많아서 적절하게 컬럼명 변경이 필요합니다.
다음과 같은 경우 참조하시면 보고서 작성시 도움이 될 겁니다.
예시를 들어 설명하겠습니다.
pandas.pivot_table()을 사용할 때 aggfunc='sum' 등으로 집계를 하면 결과의 컬럼 이름이 다중 인덱스(MultiIndex) 형태로 나와서 첫 줄이 함수명(sum), 두 번째 줄이 실제 컬럼명이 됩니다.
이럴 때는 .pivot_table() 이후 .columns를 평탄화(flatten)하면 됩니다.
✅ 문제 예시:
import pandas as pd
df = pd.DataFrame({
'지역': ['서울', '서울', '부산', '부산'],
'품목': ['A', 'B', 'A', 'B'],
'매출': [100, 200, 150, 250]
})
pivot = pd.pivot_table(df, index='지역', columns='품목', values='매출', aggfunc='sum')
print(pivot)
🔸 출력:
품목 A B
지역
부산 150 250
서울 100 200
실제로는 pivot.columns이 MultiIndex로 되어 있습니다. (level_0: sum, level_1: 품목)
✅ 해결 방법:
.columns = columns.get_level_values(1) 또는 .columns = [col[1] for col in pivot.columns]
pivot.columns = pivot.columns.get_level_values(0) # 또는 get_level_values(1)
혹은 다중 컬럼명을 문자열로 변환해서 단일 인덱스로:
pivot.columns = [col if isinstance(col, str) else col[1] for col in pivot.columns]
✅ 전체 예제 정리:
import pandas as pd
df = pd.DataFrame({
'지역': ['서울', '서울', '부산', '부산'],
'품목': ['A', 'B', 'A', 'B'],
'매출': [100, 200, 150, 250]
})
pivot = pd.pivot_table(df, index='지역', columns='품목', values='매출', aggfunc='sum')
# 다중 컬럼 해제
pivot.columns = pivot.columns.get_level_values(0)
print(pivot)
📌 요약
방법 설명
.columns.get_level_values(n) | MultiIndex의 특정 레벨만 추출 |
[col[1] for col in columns] | 튜플에서 원하는 값만 추출 |
.reset_index() | 인덱스 초기화 (필요시) |
필요에 따라 원하는 방식으로 사용하시면 됩니다.
반응형
'파이썬(Python)' 카테고리의 다른 글
파이썬-데이터프레임 데이터 필터링하기 (4) | 2025.08.14 |
---|---|
파이썬-날짜데이터 포맷 변경하기 (4) | 2025.08.13 |
파이썬- 숫자로 구성된 데이터의 포맷변환하기 (2) | 2025.08.11 |
파이썬-우편번호API 이용 우편번호 찾기(1) (1) | 2024.12.19 |
데이터프레임 데이터 정렬하기 - 다양한 옵션 활용 (0) | 2024.11.18 |