본문 바로가기

Study/PYTHON

[pandas] 데이터 재구조화 : melt()

Pandas 모듈의 melt() 함수는 ID변수 컬럼을 기준으로 다른 컬럼들을 데이터에 녹여내는 것이다.

즉, 컬럼명을 데이터에 녹이는 것이라고 생각하면 쉽다.

문법
      pd.melt( 테이블명, id_vars = 기준 컬럼 , value_vars = 녹여낼 컬럼 )
      또는
      테이블명.melt( id_vars = 기준 컬럼 , value_vars = 녹여낼 컬럼 )

 

 

우선, 설명을 위해 임의의 데이터프레임을 만듭니다.

import pandas as pd

dict = {}
dict['class_no'] = ['001','002','003','004']
dict['class'] = ['A','B','C','D']
dict['male_child'] = [1,2,3,4]
dict['male_adult'] = [5,6,7,8]
dict['female_child'] = [9,10,11,12]
dict['female_adult'] = [13,14,15,16]
dict['etc'] = ['pandas','melt','test','exemple']

test = pd.DataFrame(dict)
test

 

 1. pd.melt()를 사용하여 한 개의 컬럼 데이터로 만들기                                                                                       

기준이 되는 컬럼(id_vars)은 class, 데이터로 만들 컬럼(value_vars)은 male_child로 설정하였다.

variable이라는 컬럼에 male_child 데이터가 생성되었고, value에 male_child의 값들이 그대로 입력된다.

test2 = pd.melt(test, id_vars = 'class', value_vars = 'male_child')
test2

 

2. 여러개의 컬럼 데이터로 만들기                                                                                                                        

male_child 뿐만 아니라 male_adult, female_child, female_adult 도 데이터에 녹여내려면, value_vars에 리스트를 사용하여 컬럼명을 묶으면 된다.

test3 = pd.melt(test, id_vars = 'class', 
                value_vars = ['male_child','male_adult','female_child','female_adult'])
test3

 

3.  기준이 되는 컬럼(id_vars) 여러개 가져오기                                                                                                     

이전에는 id_vars변수를 'class' 하나로 지정하여 melt()를 실행하였다. id_vars에 여러개의 컬럼을 묶어 여러개의 데이터를 한번에 확인하려면, 리스트로 컬럼들을 묶으면 된다.

test3 = pd.melt(test, id_vars = ['class_no','class'], 
                value_vars = ['male_child','male_adult','female_child','female_adult'])
test3

 

4. variable, value 이름 지정하기                                                                                                                         

melt() 를 사용하여 데이터를 녹여내면 자동적으로 컬럼명이 variable과 value으로 설정된다. var_name, value_name을 사용하면 컬럼명을 원하는 대로 바꿀 수 있다.

test3 = pd.melt(test, id_vars = ['class_no','class'], 
                value_vars = ['male_child','male_adult','female_child','female_adult'],
               var_name = 'gender',
               value_name = 'cnt')
test3

 

 

반응형