본문 바로가기

BLOG/데이터분석

[데이터분석] 데이터프레임 : 칼럼 이름이 있는 행을 열로 변환하는 방법 - melt()

데이터프레임을 이용하여 데이터를 분석하고 처리하다 보면, 칼럼 제목에 있는 값들을 하나의 열로 바꿔주고 싶을 수 있는데요, 아래 이미지처럼, 첫 번째 표에서 두 번째 표 형식으로 데이터를 변환해서 나타내고 싶을 수 있습니다.

 

위 표를 보면, 첫 번째 표에서 칼럼 이름에 해당되는 '2019', '2020', '2021' 이 오른쪽 표에서 'year' 라는 이름의 칼럼에 데이터로 추가되었고, 첫 번째 표에서 'item'과 해당 연도에 따른 값에 해당되는 영역이 오른쪽 표에서 'price' 라는 칼럼의 데이터로 변환이 되었습니다.

 

 

한편, melt() 라는 함수는 위와 같이 데이터프레임의 형태를 변환해주는 함수인데요, 위와 같은 결과를 나타내기 위해 사용해보도록 하겠습니다.

 

 

먼저, 첫 번째 표를 나타낸 데이터프레임(df)은 다음과 같습니다.

 

	item	2019	2020	2021
0	coffee	2500	3000	3500
1	tea	3500	4000	5000
2	juice	4000	5000	5500

 

그리고나서 아래 코드를 입력하면 되는데요,

 

year = [2019, 2020, 2021]
df = df.melt(id_vars = ['item'], value_vars=year, var_name = ['year'], value_name='price') 

 

첫 번째 줄 코드에는 'year' 라는 변수에 칼럼 이름에 해당하는 값들을 리스트 형식으로 넣어주었는데요, melt() 함수에 사용할 인자로, 해당되는 칼럼 이름이 모두 포함되어야 하며, 다른 값이 포함되면 안 됩니다.

 

두 번째 줄 코드에는 df.melt() 함수를 사용했고, 4가지 인자를 추가해주었는데요, 각각의 의미는 다음과 같습니다.

- id_vars = ['item'] : 기준이 되는 칼럼 = 'item'

- value_vars = year : 기준('item')에 맞게 입력될 행 이름의 리스트(=year 리스트)

- var_name = ['year'] : 새로 만드는 칼럼의 이름 = "year"

- value_name = 'price' : 값에 해당되는 데이터를 새로운 칼럼으로 입력되는데 이때 칼럼의 이름 = 'price'

 

이렇게 입력한 뒤, 데이터프레임을 출력하면 아래와 같이 출력됩니다.

 

	item	year	price
0	coffee	2019	2500
1	tea	2019	3500
2	juice	2019	4000
3	coffee	2020	3000
4	tea	2020	4000
5	juice	2020	5000
6	coffee	2021	3500
7	tea	2021	5000
8	juice	2021	5500

 

이렇게 melt() 함수로 칼럼 이름에 해당되는 행을 열로 바꿔보았는데요, 초기 데이터프레임과 변환되고나서의 데이터프레임을 비교하며 다시 한번 확인해보시기 바랍니다 :D