본문 바로가기
데이터분석과 AI/빅데이터 분석기사

[빅데이터분석기사 실기][작업형1] pd.melt(), pd.pivot_table()로 데이터 프레임 변형하기

by 우공80 2023. 6. 16.
728x90

pd.melt(), pd.pivot_table()

pd.melt 및 pd.pivot_table은 Python에서 데이터 변형을 위한 pandas 라이브러리의 함수입니다.
용도와 사용법에 비슷한 부분이 있어서 함께 정리합니다.

1. pd.melt

이 함수는 DataFrame을 와이드 포맷에서 롱 포맷으로 변환하거나 재구성하는 데 사용됩니다. DataFrame을 unpivot 하여 열을 행으로 변환합니다. 이 함수는 DataFrame을 입력으로 사용하고 식별자 변수(id_vars)로 남아 있어야 하는 열을 지정하고 나머지는 단일 열로 통합됩니다.

예:
서로 다른 지역의 서로 다른 제품에 대한 판매 데이터를 나타내는 DataFrame이 있다고 가정해 보겠습니다.

import pandas as pd

data = {
    'Product': ['A', 'B', 'C'],
    'Region': ['North', 'South', 'East'],
    'Sales_Q1': [100, 200, 150],
    'Sales_Q2': [120, 220, 180]
}

df = pd.DataFrame(data)

Output:

  Product Region  Sales_Q1  Sales_Q2
0       A  North       100       120
1       B  South       200       220
2       C   East       150       180

이 데이터 프레임에서 판매 열('Sales_Q1' 및 'Sales_Q2')을 단일 열로 통합하려면 pd.melt를 사용할 수 있습니다

통합하면 안 되는 열을 id_vars로 지정하고, 통합하는 열을 value_vars로 지정합니다.

 

이때, value_vars는 지정하지 않으면 id_vars를 제외한 전체가 melt 되고, 명시적으로 지정하면 지정한 열만 melt 됩니다.

 

id_vars와  value_vars 모두에 지정되지 않은 열은 사라지게 됩니다.

 

var_name은 melt 되어 하나로 통합되는 열의 이름이며, 아래의 예에서는 Sales_Q1, Sales_Q2을 담는 새로운 열의 이름입니다.

 

value_name은 값 열의 이름입니다.

melted_df = pd.melt(df, id_vars=['Product', 'Region'], 
			value_vars=['Sales_Q1', 'Sales_Q2'],
                   	 var_name='Quarter', value_name='Sales')

Output:

  Product Region   Quarter  Sales
0       A  North  Sales_Q1    100
1       B  South  Sales_Q1    200
2       C   East  Sales_Q1    150
3       A  North  Sales_Q2    120
4       B  South  Sales_Q2    220
5       C   East  Sales_Q2    180

 

2. pd.pivot_table

이 함수는 DataFrame에서 피벗 테이블을 만드는 데 사용됩니다. 하나 이상의 열을 기준으로 데이터를 요약하고 집계할 수 있습니다. 이 함수는 DataFrame을 입력으로 사용하고 인덱스로 사용할 열, 피벗 테이블에서 열로 사용할 열 및 집계할 값을 지정합니다. 엑셀의 피벗 테이블과 같은 기능입니다.

 

예:
동일한 판매 데이터 DataFrame을 사용하여 제품 및 지역별 총판매를 요약하는 피벗 테이블을 생성한다고 가정해 보겠습니다. 

pivot_df = pd.pivot_table(df, 
                            values='Sales_Q1', #값
                            index='Product',  #행
                            columns='Region', #열
                            aggfunc='sum',    #집계함수
                            fill_value=0)     #결측값 채우기

Output:

Region   East  North  South
Product                    
A           0    100      0
B           0      0    200
C         150      0      0

기본적으로 엑셀의 피벗 테이블과 동일한 개념으로 보면 됩니다.  이 피벗 테이블에서 행(index)은 제품을 나타내고 열(columns)은 지역을 나타내며 값(values)은 제품과 지역의 각 조합에 대한 집계된 판매액입니다. aggfunc='sum' 매개변수는 값을 집계할 때 합계를 계산하도록 지정합니다. fill_value=0 매개변수는 누락된 값을 모두 0으로 채웁니다.

이렇게 간단하게, pd.melt와 pd.pivot_table에 대해 알아보았습니다.
요약하면 pd.melt는 열을 행으로 녹여 DataFrame을 와이드 형식에서 긴 형식으로 변환하는 데 사용되며 pd.pivot_table은 지정된 열을 기반으로 데이터를 요약하고 집계하여 피벗 테이블을 만드는 데 사용됩니다.

이렇게 데이터를 변형하는 기능은 원천 테이블이 키값으로 1:1 매핑이 안되고 1:N 등의 구조일 때 원천테이블을 병합하기 위한 용도로 자주 사용되므로 꼭 기억해두어야 하겠습니다.

 

※ 위 내용은 "빅데이터 분석기사 실기 준비를 위한 캐글 놀이터"를 따라가며 공부한 내용입니다.

https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr

 

Big Data Certification KR

빅데이터 분석기사 실기 (Python, R tutorial code)

www.kaggle.com

 

728x90

댓글