Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas DataFrame 값 그룹화하기: groupby(), size(), unstack() 완벽 가이드

Pandas DataFrame에서 값의 개수를 세어 그룹화하려면 groupby(), size(), unstack() 메서드를 함께 사용하면 됩니다. 이 방법을 사용하면 여러 열을 기준으로 데이터를 묶고, 각 조합별 빈도를 피벗 테이블 형태로 깔끔하게 정리할 수 있습니다.

1단계: DataFrame 생성

먼저 3개의 열을 가진 샘플 DataFrame을 만들어 보겠습니다. 제품 카테고리(Product Category), 제품명(Product Name), 수량(Quantity) 정보를 담은 데이터입니다.

dataFrame = pd.DataFrame({
   'Product Category': ['Computer', 'Mobile Phone', 'Electronics', 'Electronics', 'Computer', 'Mobile Phone'],
    'Product Name': ['Keyboard', 'Charger', 'SmartTV', 'Camera', 'Graphic Card', 'Earphone'],
    'Quantity': [10, 50, 10, 20, 25, 50]
})

2단계: groupby()로 개수 집계하기

이제 groupby() 메서드를 사용해 값을 그룹화합니다. 각 그룹의 개수를 셀 때는 size()를, 결과를 새로운 열 라벨 구조로 변환할 때는 unstack()을 사용합니다.

unstack(fill_value=0)처럼 fill_value=0 옵션을 지정하면, 해당하지 않는 조합의 결측값(NaN)이 자동으로 0으로 채워지므로 결과를 해석하기가 한결 편해집니다.

dataFrame = dataFrame.groupby(['Product Category', 'Product Name', 'Quantity']).size().unstack(fill_value=0)

전체 예제 코드

지금까지 설명한 내용을 모두 포함한 전체 코드는 다음과 같습니다.

import pandas as pd

# 3개의 열을 가진 데이터프레임 생성
dataFrame = pd.DataFrame({
   'Product Category': ['Computer', 'Mobile Phone', 'Electronics', 'Electronics', 'Computer', 'Mobile Phone'],
    'Product Name': ['Keyboard', 'Charger', 'SmartTV', 'Camera', 'Graphic Card', 'Earphone'],
    'Quantity': [10, 50, 10, 20, 25, 50]
})

# 데이터프레임 출력
print("Dataframe...\n", dataFrame)

# 그룹화 후 개수 계산 및 unstack 적용
dataFrame = dataFrame.groupby(['Product Category', 'Product Name', 'Quantity']).size().unstack(fill_value=0)

print("\nResultant DataFrame...\n", dataFrame)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Dataframe...
   Product Category   Product Name   Quantity
0         Computer       Keyboard         10
1     Mobile Phone        Charger         50
2      Electronics        SmartTV         10
3      Electronics         Camera         20
4         Computer   Graphic Card         25
5     Mobile Phone       Earphone         50

Resultant DataFrame...
Quantity                            10   20   25   50
Product Category   Product Name
Computer           Graphic Card   0    0    1    0
                   Keyboard       1    0    0    0
Electronics        Camera         0    1    0    0
                   SmartTV        1    0    0    0
Mobile Phone       Charger        0    0    0    1
                   Earphone       0    0    0    1

결과 해석

최종 출력된 DataFrame을 살펴보면, 'Product Category'와 'Product Name'이 멀티 인덱스(행)로 지정되고, 'Quantity' 값(10, 20, 25, 50)이 열 라벨로 배치되었습니다. 예를 들어 Computer 카테고리의 Keyboard는 수량 10이 1건 존재하고, Electronics의 Camera는 수량 20이 1건 존재함을 한눈에 확인할 수 있습니다. 이렇게 groupby()size(), unstack()을 조합하면 복잡한 데이터도 직관적인 교차표 형태로 손쉽게 정리할 수 있습니다.