Pandas groupby 사용방법

Pandas groupby 사용방법

Pandas
Pandas groupby 사용방법
Author

gabriel yang

Published

August 26, 2024

Pandas groupby를 사용해야 하는 데이터 유형과 사용 방법

Pandas는 데이터 분석과 조작을 위한 강력한 라이브러리로, 특히 groupby 기능을 통해 데이터를 그룹화하여 다양한 방식으로 요약하고 분석할 수 있습니다. 이 글에서는 groupby를 사용해야 하는 데이터 유형과 이를 사용하는 방법을 예제와 함께 설명하겠습니다.

1. groupby를 사용해야 하는 데이터 유형

groupby는 데이터를 특정 기준에 따라 그룹화하고, 각 그룹에 대해 집계 또는 통계 연산을 수행할 때 유용합니다. 주로 다음과 같은 데이터 유형에 대해 groupby를 사용합니다:

  1. 범주형 데이터: 특정 범주(예: 지역, 제품, 성별 등)에 따라 데이터를 그룹화하고, 각 범주별로 요약된 정보를 확인할 때 유용합니다.

  2. 시간 시리즈 데이터: 날짜나 시간 단위로 데이터를 그룹화하여, 월별, 분기별, 연도별로 집계된 데이터를 분석할 때 자주 사용됩니다.

  3. 반복되는 항목: 동일한 항목(예: 동일한 고객, 제품 등)에 대해 여러 번 기록된 데이터를 그룹화하여, 각 항목의 총합, 평균, 최댓값 등을 계산할 때 효과적입니다.

2. groupby의 사용 방법

groupby는 데이터를 특정 열(column)에 따라 그룹화한 후, 각 그룹에 대해 특정 집계 함수를 적용하는 방식으로 사용됩니다. 아래 예제는 groupby를 사용하는 기본적인 방법을 보여줍니다.

2.1 예제 데이터 준비

먼저, 샘플 데이터를 생성해 보겠습니다.

import pandas as pd

# 샘플 데이터 생성
data = {
    'Product': ['A', 'B', 'A', 'B', 'C', 'A', 'B', 'C', 'C', 'A'],
    'Category': ['Electronics', 'Electronics', 'Furniture', 'Furniture', 'Furniture', 'Electronics', 'Electronics', 'Furniture', 'Electronics', 'Furniture'],
    'Sales': [150, 200, 120, 180, 160, 220, 190, 130, 180, 250],
    'Quantity': [2, 3, 1, 2, 2, 3, 2, 1, 3, 2]
}

df = pd.DataFrame(data)
df
Product Category Sales Quantity
0 A Electronics 150 2
1 B Electronics 200 3
2 A Furniture 120 1
3 B Furniture 180 2
4 C Furniture 160 2
5 A Electronics 220 3
6 B Electronics 190 2
7 C Furniture 130 1
8 C Electronics 180 3
9 A Furniture 250 2

데이터는 ProductCategory에 중복한 데이터가 존재하는 long format형식의 데이터 입니다.

2.2 groupby를 사용한 기본 집계

이제, Product 열을 기준으로 데이터를 그룹화하고, 각 제품의 총판매액과 총판매량을 계산해 보겠습니다.

# 'Product' 열을 기준으로 그룹화하여 총판매액과 총판매량 계산
grouped = df.groupby('Product').agg({'Sales': 'sum', 'Quantity': 'sum'})

# 결과 출력
grouped
Sales Quantity
Product
A 740 8
B 570 7
C 470 6
  • groupby('Product'): Product 열을 기준으로 데이터를 그룹화합니다.
  • agg({'Sales': 'sum', 'Quantity': 'sum'}): 각 그룹에 대해 SalesQuantity 열의 합계를 계산합니다.

2.3 다중 그룹화와 여러 집계 함수 적용

groupby는 여러 열을 기준으로 그룹화하거나, 여러 집계 함수를 동시에 적용할 수도 있습니다. 다음 예제는 CategoryProduct 열을 함께 그룹화한 후, Sales의 총합, 평균, Quantity의 최대값을 계산하는 방법을 보여줍니다.

# 'Category'와 'Product' 열을 기준으로 그룹화하여 집계 연산 수행
grouped = df.groupby(['Category', 'Product']).agg({
    'Sales': ['sum', 'mean'],
    'Quantity': 'max'
})

# 결과 출력
grouped
Sales Quantity
sum mean max
Category Product
Electronics A 370 185.0 3
B 390 195.0 3
C 180 180.0 3
Furniture A 370 185.0 2
B 180 180.0 2
C 290 145.0 2
  • groupby(['Category', 'Product']): CategoryProduct 열을 함께 그룹화합니다.
  • agg({'Sales': ['sum', 'mean'], 'Quantity': 'max'}): 각 그룹에 대해 Sales의 총합과 평균, Quantity의 최대값을 계산합니다.

2.4 groupby 통계함수

Pandas의 groupby에서 agg 함수를 사용할 때, 다양한 통계 함수를 적용할 수 있습니다. 이들 통계 함수는 그룹화된 데이터에 대해 요약 통계를 계산하고, 데이터의 특정 속성을 분석하는 데 유용합니다. 여기서는 agg에서 자주 사용되는 주요 통계 함수들을 설명하겠습니다.

sum()

설명: 그룹 내 모든 값의 합계를 계산합니다.
사용 예시: 판매 데이터에서 제품별 총 판매량을 계산할 때 유용합니다.
grouped = df.groupby('Product').agg({'Sales': 'sum'})

mean()

설명: 그룹 내 모든 값의 평균을 계산합니다.
사용 예시: 각 제품의 평균 판매 금액을 계산할 때 사용합니다.
grouped = df.groupby('Product').agg({'Sales': 'mean'})

median()

설명: 그룹 내 모든 값의 중앙값을 계산합니다.
사용 예시: 데이터가 비대칭적일 때, 중앙값을 사용하여 중앙 경향을 파악할 수 있습니다.
grouped = df.groupby('Product').agg({'Sales': 'median'})

min()

설명: 그룹 내 모든 값 중 최솟값을 반환합니다.
사용 예시: 각 제품의 최소 판매 금액을 찾을 때 유용합니다.
grouped = df.groupby('Product').agg({'Sales': 'min'})

max()

설명: 그룹 내 모든 값 중 최댓값을 반환합니다.
사용 예시: 각 제품의 최대 판매 금액을 확인할 때 사용합니다.
grouped = df.groupby('Product').agg({'Sales': 'max'})

count()

설명: 그룹 내 값의 개수를 계산합니다.
사용 예시: 각 제품이 몇 번 판매되었는지, 판매 횟수를 계산할 때 유용합니다.
grouped = df.groupby('Product').agg({'Sales': 'count'})

std() (Standard Deviation)

설명: 그룹 내 값들의 표준 편차를 계산합니다. 데이터의 변동성을 파악할 수 있습니다.
사용 예시: 각 제품의 판매 금액이 얼마나 변동했는지를 분석할 때 사용합니다.
grouped = df.groupby('Product').agg({'Sales': 'std'})

var() (Variance)

설명: 그룹 내 값들의 분산을 계산합니다. 데이터의 분포가 얼마나 퍼져 있는지를 나타냅니다.
사용 예시: 각 제품의 판매 금액이 얼마나 분산되어 있는지 분석할 때 유용합니다.
grouped = df.groupby('Product').agg({'Sales': 'var'})

first()

설명: 그룹 내 첫 번째 값을 반환합니다.
사용 예시: 그룹 내 첫 번째 거래나 기록을 확인할 때 사용합니다.
grouped = df.groupby('Product').agg({'Sales': 'first'})

####last() ###### 설명: 그룹 내 마지막 값을 반환합니다. ###### 사용 예시: 그룹 내 마지막 거래나 기록을 확인할 때 유용합니다.

grouped = df.groupby('Product').agg({'Sales': 'last'})

nunique()

설명: 그룹 내 고유한 값의 개수를 계산합니다.
사용 예시: 각 제품이 몇 개의 고유한 고객에게 판매되었는지 확인할 때 사용합니다.
grouped = df.groupby('Product').agg({'Customer_ID': 'nunique'})

mode()

설명: 그룹 내에서 가장 자주 나타나는 값을 반환합니다.
사용 예시: 각 그룹에서 가장 자주 발생한 값(예: 가장 많이 판매된 제품)을 찾을 때 유용합니다.
grouped = df.groupby('Product').agg({'Sales': lambda x: x.mode()[0]})

apply()

설명: 그룹에 대해 사용자 정의 함수를 적용합니다.
사용 예시: 기본 제공되는 통계 함수로는 해결할 수 없는 복잡한 계산을 수행할 때 사용합니다.
grouped = df.groupby('Product').agg({'Sales': lambda x: x.max() - x.min()})

quantile()

설명: 그룹 내 값의 특정 분위수(Percentile)를 반환합니다.
사용 예시: 특정 분위수(예: 상위 25%)에 해당하는 값을 찾을 때 유용합니다.
grouped = df.groupby('Product').agg({'Sales': lambda x: x.quantile(0.25)})

3. groupby 활용 예시

groupby는 매우 다양한 상황에서 사용할 수 있습니다. 몇 가지 활용 예시는 다음과 같습니다:

  1. 매출 분석:
    • 제품별, 지역별, 월별로 매출 데이터를 그룹화하여 각 항목의 매출 총합, 평균, 성장률 등을 계산할 수 있습니다.
  2. 고객 행동 분석:
    • 고객을 기준으로 구매 빈도, 평균 구매 금액, 최대 구매 금액 등을 계산하여, 고객 세분화 및 타겟 마케팅에 활용할 수 있습니다.
  3. 시간 시리즈 분석:
    • 날짜나 시간 단위로 데이터를 그룹화하여 일별, 주별, 월별로 집계된 데이터를 분석할 수 있습니다.

4. 결론

Pandas의 groupby 기능은 데이터를 그룹화하여 다양한 방식으로 요약하고 분석하는 데 매우 유용합니다. 특히 범주형 데이터, 시간 시리즈 데이터, 반복되는 항목을 처리할 때 효과적입니다. 위에서 소개한 예제와 같이 groupby를 활용하면, 데이터를 보다 효율적으로 분석하고, 의미 있는 인사이트를 도출할 수 있습니다.