-
[pandas] DataFrame melt 알아보기Python 2024. 5. 17. 22:31728x90반응형
- 목차
키워드.
- - Pivot Table
들어가며.
이번 글에서는 Pandas DataFrame 의 melt 함수에 대해서 알아보도록 하겠습니다.
melt 는 Pivot Table 을 row-by-row 형식으로 변경할 수 있습니다.
예를 들어, 아래 이미지와 같이 user 와 item 에 해당하는 DataFrame 이 존재한다고 가정하겠습니다.
위 DataFrame 은 row-by-row 형식으로 user 와 item 의 관계를 보여줍니다.
이는 user 와 item 각각의 Column 으로 설정하죠.
위 DataFrame 의 Pivot Table 형식은 아래와 같습니다.
Pivot Table 의 index 는 user, column 은 item 이 됩니다.
이 상황에서 melt 함수를 사용하면 Pivot Table 을 원본 테이블로 변형이 가능합니다.
import pandas as pd data = [ ('Andy', 'item1'), ('Bob', 'item2'), ('Chris', 'item1'), ('Daniel', 'item1'), ('Frank', 'item2'), ('Emily', 'item1'), ] df = pd.DataFrame(data, columns=['user', 'item']) pivot_table = df.assign(count=[1] * len(df)).pivot_table(index='user', columns='item', values='count') pd.melt(pivot_table.reset_index(), id_vars='user', var_name='item').dropna(axis=0)
melt 함수 알아보기.
melt 함수는 이름에서 유추할 수 있듯이, "녹아서 흐른다" 는 이미지를 내포합니다.
흔히 특정 칼럼의 값들을 Row 방향으로 확장시킬 수 있는데요.
이 과정에서 기존의 DataFrame 이 변형되게 됩니다.
melt 함수가 필요로하는 argument 들에 대해서 설명하여 melt 함수에 대해 자세히 알아보겠습니다.
id_vars.
id_vars 는 melt 함수에서 기준이 되는 Column 을 지정합니다.
아래의 DataFrame 은 5명의 사람들이 5개의 음식을 얼마나 선호하는지에 대해 나타냅니다.
import pandas as pd import numpy as np index = ['Andy', 'Bruce', 'Conan', 'Dennis', 'Fabian', 'Emma'] columns = ['Apple', 'Banana', 'Candy', 'Donuts', 'Eggs'] values = np.random.rand(len(index), len(columns)) df = pd.DataFrame(values, index, columns)
이는 Pivot Table 형태를 갖추고 있는데요.
아래와 같은 melt 함수를 적용하여 모든 칼럼들을 variable 과 value 칼럼에 할당되도록 변형할 수 있습니다.
마치 2개의 칼럼 내부로 녹아내린듯한 액션을 취합니다.
이 과정에서 기준이 될 칼럼을 지정할 수 있는데요.
id_vars 인자를 통해서 기준을 결정합니다.
df = pd.DataFrame(values, index, columns) df.reset_index(names=['user']).melt(id_vars=["user"])
value_vars.
value_vars 인자는 melt 함수를 통해서 DataFrame 을 재배치시킬 때에, 모든 칼럼이 아닌 특정 칼럼들로 제한할 수 있습니다.
아래의 예시에서는 Apple, Banana 두 칼럼만 Melt 되도록 제한합니다.
아래 이미지에서 확인할 수 있듯이, Apple 과 Banana 만이 새로운 칼럼인 variable 와 value 에 배치됩니다.
import pandas as pd import numpy as np index = ['Andy', 'Bruce', 'Conan', 'Dennis', 'Fabian', 'Emma'] columns = ['Apple', 'Banana', 'Candy', 'Donuts', 'Eggs'] values = np.random.rand(len(index), len(columns)) df = pd.DataFrame(values, index, columns) df.reset_index(names=['user']).melt(id_vars=["user"], value_vars=['Apple', 'Banana'])
var_name.
melt 의 결과로써 "variable" 과 "value" 칼럼이 생성됩니다. 그리고 이 두 칼럼으로 데이터들이 재배치되죠.
var_name 인자는 variable 칼럼의 이름을 지정할 수 있는 인자입니다.
아래의 예시에서 Food_Name 이라는 새로운 칼럼명을 적용해보았습니다.
import pandas as pd import numpy as np index = ['Andy', 'Bruce', 'Conan', 'Dennis', 'Fabian', 'Emma'] columns = ['Apple', 'Banana', 'Candy', 'Donuts', 'Eggs'] values = np.random.rand(len(index), len(columns)) df = pd.DataFrame(values, index, columns) df.reset_index(names=['user']).melt(id_vars=["user"], value_vars=['Apple', 'Banana'], var_name='Food_Name' )
value_name.
value_name 은 melt 함수로 재배치된 DataFrame 의 "value" 칼럼의 이름을 지정할 수 있는 인자입니다.
import pandas as pd import numpy as np index = ['Andy', 'Bruce', 'Conan', 'Dennis', 'Fabian', 'Emma'] columns = ['Apple', 'Banana', 'Candy', 'Donuts', 'Eggs'] values = np.random.rand(len(index), len(columns)) df = pd.DataFrame(values, index, columns) df.reset_index(names=['user']).melt(id_vars=["user"], value_vars=['Apple', 'Banana'], var_name='Food_Name', value_name='Preference' )
반응형'Python' 카테고리의 다른 글
[Pandas] DataFrame loc, iloc 알아보기 (0) 2024.04.19 [Pandas] Boolean Indexing 알아보기 (0) 2024.04.15 [Pandas] DataFrame pd.merge 알아보기 (Join) (0) 2024.04.09 [Python] yield 알아보기 ( generator ) (0) 2024.04.06 [Numpy] copy & view 알아보기 (Shallow, Deep Copy) (0) 2024.03.18