Pandas에서 데이터를 변환할 때 가장 많이 사용하는 두 가지 함수는 pivot과 pivot_table입니다. 이 둘은 유사한 작업을 수행하지만, 특정 상황에서 사용하는 방식과 결과에 차이가 있습니다.
아래는 예제로 사용할 데이터프레임입니다:
python
코드 복사
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({
'date': ['2025-01-01', '2025-01-01', '2025-01-01', '2025-01-01', '2025-01-01'],
'category1': ['메인', '메인', '사이드', '음료', '사이드'],
'category2': ['양념치킨', '간장치킨', '치즈볼', '콜라', '감자튀김'],
'count': [1, 2, 1, 4, 1],
'price': ['20000', '50000', '6000', '8000', '8000']
})
데이터프레임의 구조는 다음과 같습니다:
| date | category1 | category2 | count | price |
|---|---|---|---|---|
| 2025-01-01 | 메인 | 양념치킨 | 1 | 20000 |
| 2025-01-01 | 메인 | 간장치킨 | 2 | 50000 |
| 2025-01-01 | 사이드 | 치즈볼 | 1 | 6000 |
| 2025-01-01 | 음료 | 콜라 | 4 | 8000 |
| 2025-01-01 | 사이드 | 감자튀김 | 1 | 8000 |
pivot 함수 사용pivot은 데이터를 특정 기준으로 재구조화합니다. 다음은 간단한 예제입니다:category2를 열로 설정하고 count를 값으로 설정
python
코드 복사
df.pivot(index='date', columns='category2', values='count')
결과:
| category2 | 간장치킨 | 감자튀김 | 양념치킨 | 치즈볼 | 콜라 |
|---|---|---|---|---|---|
| 2025-01-01 | 2 | 1 | 1 | 1 | 4 |
category1을 열로 설정하고 price를 값으로 설정
python
코드 복사
df.pivot(index='date', columns='category1', values='price')
에러 발생: 동일한 (date, category1) 조합에 여러 값이 존재하기 때문입니다.
pivot_table 함수 사용pivot_table은 aggfunc(집계 함수)를 사용해 중복 데이터로 인한 에러를 방지합니다:python
코드 복사
df.pivot_table(index='date', columns='category2', values='count')
결과:
| category2 | 간장치킨 | 감자튀김 | 양념치킨 | 치즈볼 | 콜라 |
|---|---|---|---|---|---|
| 2025-01-01 | 2 | 1 | 1 | 1 | 4 |
aggfunc='mean'(기본값): 중복되는 값이 있는 경우 평균을 계산합니다.pivot과 pivot_table의 차이점| 구분 | pivot | pivot_table |
|---|---|---|
| 중복 데이터 처리 | 에러 발생 | aggfunc를 사용해 집계 가능 |
| 기본 집계 함수 | 지원하지 않음 | 평균(mean) 기본 제공 |
| 사용 용도 | 데이터가 중복되지 않는 경우 | 데이터 중복 및 집계가 필요한 경우 |
pivot: 중복되지 않는 데이터를 간단히 재구조화할 때 사용.pivot_table: 중복 데이터 처리 및 집계가 필요한 경우 적합.