Pandas에서 pivot_table 사용하기

pivot_table을 사용해야 하는 데이터 유형과 사용 방법

Pandas
pivot_table을 사용해야 하는 데이터 유형과 사용 방법
Author

gabriel yang

Published

August 24, 2024

Pandas에서 pivot_table 사용하기

데이터 분석 작업을 할 때, 데이터를 다양한 방식으로 요약하고 집계할 필요가 있습니다. 이때 pandaspivot_table 함수는 매우 유용한 도구입니다. pivot_table은 데이터프레임을 특정 기준에 따라 집계하여 데이터를 요약해주는 기능을 제공합니다. 이 글에서는 pivot_table을 사용해야 하는 데이터 유형과 그 사용 방법을 예시와 함께 설명하겠습니다.

1. pivot_table이 필요한 데이터 유형

pivot_table은 데이터가 중복된 항목을 포함하거나, 특정 기준에 따라 데이터를 요약해야 하는 경우에 특히 유용합니다.

예시: Raw Data Format

| Year | Product   | Region   | Sales |
|------|-----------|----------|-------|
| 2020 | Product_A | North    | 100   |
| 2020 | Product_A | South    | 120   |
| 2020 | Product_B | North    | 150   |
| 2020 | Product_B | South    | 130   |
| 2021 | Product_A | North    | 110   |
| 2021 | Product_A | South    | 140   |
| 2021 | Product_B | North    | 160   |
| 2021 | Product_B | South    | 150   |

위와 같은 데이터는 long format으로, 연도별, 제품별, 지역별로 세분화된 판매 데이터를 포함하고 있습니다. 이러한 데이터를 요약하여, 예를 들어 연도와 제품별로 지역별 판매량의 합계를 구하고자 할 때 pivot_table을 사용하면 매우 효율적입니다.

pivot_table 사용 후의 요약 데이터

| Year | Product   | North | South |
|------|-----------|-------|-------|
| 2020 | Product_A | 100   | 120   |
| 2020 | Product_B | 150   | 130   |
| 2021 | Product_A | 110   | 140   |
| 2021 | Product_B | 160   | 150   |

위처럼 pivot_table을 사용하면 데이터를 쉽게 요약하여, 특정 기준에 따른 통계값을 계산할 수 있습니다.

2. pandas.pivot_table() 사용 방법

pivot_table 함수는 데이터를 인덱스와 열, 집계 방법을 기반으로 재구성하여 원하는 형식으로 요약된 결과를 반환합니다.

2.1 기본 사용법

import pandas as pd

# 데이터프레임 생성
df = pd.DataFrame({
    'Year': [2020, 2020, 2020, 2020, 2021, 2021, 2021, 2021],
    'Product': ['Product_A', 'Product_A', 'Product_B', 'Product_B',
                'Product_A', 'Product_A', 'Product_B', 'Product_B'],
    'Region': ['North', 'South', 'North', 'South',
               'North', 'South', 'North', 'South'],
    'Sales': [100, 120, 150, 130, 110, 140, 160, 150]
})
df
Year Product Region Sales
0 2020 Product_A North 100
1 2020 Product_A South 120
2 2020 Product_B North 150
3 2020 Product_B South 130
4 2021 Product_A North 110
5 2021 Product_A South 140
6 2021 Product_B North 160
7 2021 Product_B South 150

각 제품이 지역별로 얼마나 팔렸는지 확인하기 위해서 위의 데이터를 pivot_table로 변환합니다.

# pivot_table 사용하여 요약
df_pivoted = df.pivot_table(index=['Year', 'Product'],
                            columns='Region',
                            values='Sales',
                            aggfunc='sum')

# 결과 확인
df_pivoted
Region North South
Year Product
2020 Product_A 100 120
Product_B 150 130
2021 Product_A 110 140
Product_B 160 150

2.2 파라미터 설명

  • index: 새로운 데이터프레임에서 행으로 사용할 열을 지정합니다. 위 예제에서는 YearProduct가 인덱스로 사용됩니다.
  • columns: 새로운 데이터프레임에서 열로 사용할 열을 지정합니다. 여기서는 Region이 열이 됩니다.
  • values: 요약할 때 사용할 데이터 열을 지정합니다. 예제에서는 Sales가 요약 값으로 사용됩니다.
  • aggfunc: 데이터를 요약할 때 사용할 집계 함수를 지정합니다. 기본값은 'mean'이지만, 예제에서는 'sum'을 사용하여 판매량의 합계를 계산했습니다.

2.3 변환 결과

위의 pivot_table 사용 예제에서 df_pivoted는 다음과 같은 요약된 데이터프레임이 됩니다.

Region           North  South
Year Product
2020 Product_A    100    120
     Product_B    150    130
2021 Product_A    110    140
     Product_B    160    150

이 데이터프레임에서는 YearProduct가 인덱스가 되고, 각 지역(North, South)이 열로 분류되며, 각 셀에는 해당 연도, 제품, 지역에 대한 판매량(Sales)의 합계가 들어갑니다.

3. 언제 pivot_table을 사용해야 할까?

pivot_table 함수는 다음과 같은 경우에 유용하게 사용됩니다:

  • 중복된 데이터를 요약해야 할 때: 여러 항목이 동일한 인덱스와 열 조합에 존재할 때, 이들을 집계하여 요약해야 할 경우.

  • 다양한 집계 함수가 필요할 때: 단순히 데이터의 평균만이 아니라 합계, 최댓값, 최솟값, 개수 등을 구해야 할 때 aggfunc 옵션을 통해 다양한 집계 함수를 사용할 수 있습니다.

  • 다차원 데이터 요약: 여러 인덱스와 열을 기준으로 데이터를 다차원적으로 요약하여 분석할 때 pivot_table이 유용합니다.

4. 추가 기능

  • aggfunc: 집계 함수로 'mean', 'sum', 'min', 'max', 'count', 'std' 등 다양한 함수를 지정할 수 있습니다.

  • margins: margins=True로 설정하면 행과 열의 총합을 계산하여 “All”이라는 이름의 행과 열이 추가됩니다.

  • fill_value: 결측값(NaN)을 특정 값으로 채우고자 할 때 사용합니다. 예를 들어, fill_value=0으로 설정하면 NaN 값이 0으로 대체됩니다.

통계 정보를 확인하기 위해서 새로운 데이터를 생성합니다.

import pandas as pd

# 예제 데이터 생성
data = {
    'Year': [2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020],
    'Product': ['Product_A', 'Product_A', 'Product_B', 'Product_B',
                'Product_A', 'Product_A', 'Product_B', 'Product_B'],
    'Region': ['North', 'South', 'North', 'South',
               'North', 'South', 'North', 'South'],
    'Sales': [100, 120, 150, 130, 110, 140, 160, 150],
    'Profit': [20, 25, 30, 28, 22, 27, 35, 33]
}

df = pd.DataFrame(data)
df
Year Product Region Sales Profit
0 2020 Product_A North 100 20
1 2020 Product_A South 120 25
2 2020 Product_B North 150 30
3 2020 Product_B South 130 28
4 2020 Product_A North 110 22
5 2020 Product_A South 140 27
6 2020 Product_B North 160 35
7 2020 Product_B South 150 33

pivot_table의 통계정보를 확인합니다.

pivot_result = pd.pivot_table(
    df,
    index=['Year', 'Product'],
    columns='Region',
    values=['Sales'],
    aggfunc=['mean', 'sum', 'min', 'max', 'std']
)
pivot_result
mean sum min max std
Sales Sales Sales Sales Sales
Region North South North South North South North South North South
Year Product
2020 Product_A 105 130 210 260 100 120 110 140 7.071068 14.142136
Product_B 155 140 310 280 150 130 160 150 7.071068 14.142136

Product_AProduct_BRegionSale정보에 대해서 다양한 통계정보를 확인할 수 있습니다. 평균, 총합, 최솟값, 최댓값, 표준편차값이 출력됩니다.

5. 결론

pandas.pivot_table() 함수는 데이터를 요약하고 집계하는 데 매우 강력한 도구입니다. 데이터를 특정 기준에 따라 요약해야 할 때, 특히 동일한 인덱스와 열 조합에 여러 값이 있을 때 유용합니다. 다양한 집계 함수를 지원하며, 다차원적으로 데이터를 요약할 수 있어, 데이터 분석에서 필수적인 기능입니다.