let us not love with words or tongue but actions and truth.

IT/파이썬

Stack과 melt로 데이터 Transpose하기

sarah0518 2021. 2. 6. 00:42
728x90

 

오늘은 sas의 proc transpose와 유사하게

파이썬에서 stack / melt를 사용해서 동일한 효과를 내는 방법을 배워보려고합니다.

 

 

1. Stack 사용하기

보통 data를 Transpose하는 것으로는 pivot이나, melt를 쓰지만

set_index과 stack으로도 간단하게 transpose할 수 있어요.

 

 

아래와 같이 간단한 데이터가 있다고 볼게요.

 

[원본데이터]

 

목표는 컬럼에 있는 v1-v4까지의 값들이 컬럼으로 들어가고 그에 해당하는 값들이 한 컬럼으로 들어가는 것입니다.

id1=a인 값으로 예를 들어볼게요.

 

아래와 같이 id1=a인 값에서, 각 v1-v4가 하나의 컬럼, 그에 해당하는 값도 하나의 컬럼으로 들어가는 거죠.

 

 

[output으로 만들고 싶은 데이터 형태]

 

1
stack[stack['id1']=='a'].set_index(['id1','id2']).T.stack('id2').reset_index()
cs

 

 

 

간단하게 위의 한줄이면 transpose할 수 있습니다.

 

코드를 쪼개서 확인해보면, 우선 id1, id2로 index를 설정해주고

 

 

아래와 같이 행과열을 바꿔 준 다음,

 

id2로 stack을 해주면 됩니다.

 

 

2. melt 사용하기

 

melt는 SAS의 proc transpose와 유사하다고 생각하시면 됩니다.

 

1
stack2=stack[stack['id1']=='a'].melt(id_vars = ['id1','id2'], var_name='v_code', value_name='value')
cs

 

아까 stack보다는 조금더 직관적이고 이해가 쉬울거같아요!

 

 

stack한뒤 rename을 따로 해주지 않아도, 코드 한줄이면 끝나게 되어 melt를 추천합니다.

 

728x90