pandas의 pivot, pivot_table, groupby 비교

킹용맨 ㅣ 2026. 2. 9. 12:06

데이터의 모양을 자유자재로 바꾸는 판다스(Pandas)의 3총사

파이썬 데이터 분석의 핵심 도구인 판다스에서 데이터를 그룹화하고 재구조화하는 기능은 매우 중요합니다. 특히 pivot, pivot_table, groupby는 비슷해 보이지만 사용 목적과 유연성에서 차이가 있습니다. 각 기능의 특징과 차이점을 명확히 정리해 드립니다.




1. pivot: 데이터의 형태만 바꾸기

pivot은 데이터프레임의 열을 기준으로 행과 열의 구조를 단순히 재배치할 때 사용합니다. 데이터의 내용을 요약하거나 계산하지 않고, 보기 좋게 펼치는 용도입니다.

  • 특징: 중복된 행/열 조합이 있으면 에러가 발생합니다. 즉, 1:1 대응 관계일 때만 사용 가능합니다.
  • 사용 예시: 시간별로 나열된 여러 종목의 주가 데이터를 종목별 열로 변환할 때 유용합니다.
import pandas as pd

# 샘플 데이터 생성
df = pd.DataFrame({
    '날짜': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02'],
    '종목': ['삼성전자', 'SK하이닉스', '삼성전자', 'SK하이닉스'],
    '가격': [70000, 130000, 71000, 132000]
})

# pivot 적용: 날짜를 행으로, 종목을 열로 배치
pivot_df = df.pivot(index='날짜', columns='종목', values='가격')
print(pivot_df)



2. pivot_table: 강력한 요약 도구

pivot_table은 엑셀의 피벗 테이블과 거의 동일한 기능을 수행합니다. pivot과 달리 중복된 항목이 있어도 평균, 합계 등 집계 함수(aggfunc)를 사용하여 데이터를 요약할 수 있습니다.

  • 특징: 데이터의 요약(Aggregation)이 가능하며, 결측치 처리나 총합(Margins) 표시 기능이 강력합니다.
  • 사용 예시: 지점별, 상품별 매출 합계나 평균을 구할 때 가장 많이 쓰입니다.
# 중복 항목이 있는 데이터
df_sales = pd.DataFrame({
    '지역': ['서울', '서울', '부산', '부산', '서울'],
    '상품': ['A', 'B', 'A', 'B', 'A'],
    '매출': [100, 150, 200, 50, 120]
})

# pivot_table 적용: 지역별 상품 매출의 합계 계산
pt_df = df_sales.pivot_table(index='지역', columns='상품', values='매출', aggfunc='sum')
print(pt_df)



3. groupby: 분석의 만능 열쇠

groupby는 '분할(Split) - 적용(Apply) - 결합(Combine)'의 과정을 거쳐 데이터를 분석합니다. 특정 기준에 따라 데이터를 그룹으로 묶은 뒤, 다양한 연산을 수행하고 다시 합치는 방식입니다.

  • 특징: 가장 유연하고 강력합니다. 한 번에 여러 개의 집계 함수를 적용하거나 사용자 정의 함수를 쓸 수도 있습니다.
  • 사용 예시: 특정 카테고리별로 최대값, 최소값, 평균을 동시에 구해야 할 때 최적입니다.
# groupby 적용: 지역별로 매출의 평균과 개수를 동시에 확인
grouped = df_sales.groupby('지역')['매출'].agg(['mean', 'count'])
print(grouped)



한눈에 비교하는 핵심 차이점

데이터의 구조와 목적에 따라 적절한 도구를 선택하는 것이 효율적인 분석의 시작입니다.

구분 pivot pivot_table groupby
주요 목적 단순 재구조화 (Reshaping) 집계가 포함된 재구조화 그룹별 분석 및 연산
중복 데이터 허용 안 함 (에러 발생) 허용 함 (집계 함수 사용) 허용 함 (그룹화)
출력 형태 2차원 매트릭스 (행/열) 2차원 매트릭스 (행/열) Series 또는 DataFrame
유연성 낮음 중간 매우 높음