[Python] pandas.melt()
2022. 5. 10. 21:52ㆍPython
pd.melt() 함수는 여러 개의 열은 행으로 쌓아 하나의 열로 만들고 싶을 때 사용하면 좋은 함수이다.
알아두면 데이터 전처리에 유용하게 쓸 수 있다.
1. pandas.melt()
Unpivot a DataFrame from wide to long format, optinally leaving identifiers set
pandas.melt(
frame,
id_vars=None,
value_vars=None,
var_name=None,
value_name='value',
col_level=None,
ignore_index=True)
- id_vars : 인덱스 변수로 사용할 칼럼
- value_vars : 하나의 열로 나열하고자 하는("unpivot") 칼럼 리스트/튜플/배열, 미지정시 id_vals를 제외한 모든 칼럼
- var_name : variable 칼럼명 (default = 'variable')
- value_name : value 칼럼명 (default = 'var_name')
2. 사용 예시
import pandas as pd
df = pd.DataFrame(
columns = ["user", "202201", "202202", "202203", "202204"],
data = [["a", 1, 3, 4, 5], ["b", 1, 2, 7, 8], ["c", 2, 3, 4, 5]]
)

예를 들어, 사용자(user)의 로그 데이터를 월별로 집계하여 위와 같은 테이블을 생성하였다고 가정하자.
만약 사용자에 대한 월별 정보를 행방향으로 나열하고 싶다면, pd.melt() 함수를 활용할 수 있다.
df_melt = pd.melt(
df,
id_vars="user",
value_vars=["202201", "202202", "202203", "202204"]
)

칼럼명에 있던 연월 정보가 새로운 칼럼으로 생성되고, 각 칼럼의 값들은 행 방향으로 쌓아 하나의 칼럼으로 재구성된 것을 확인할 수 있다. 이 경우에는 value_vars 값을 입력하지 않아도 같은 결과를 얻을 수 있다. (id_vars를 제외한 나머지 칼럼을 자동으로 선택하기 때문에)
df_melt = pd.melt(df,
id_vars="user",
value_vars=["202201", "202202", "202203", "202204"],
var_name="month",
value_name="click_count")
df_melt.sort_values("user")

새롭게 생성되는 칼럼의 이름을 지정해주고 싶다면,
변수에 해당하는 칼럼은 var_name, 값에 해당하는 칼럼은 value_name 인자에 원하는 값을 입력하면 된다.
3. 참고
[1] https://pandas.pydata.org/docs/reference/api/pandas.melt.html
'Python' 카테고리의 다른 글
효율적인 프로젝트 관리를 위한 가상환경 구축 방법 (0) | 2023.12.11 |
---|---|
pandas.date_range - 주기적인 날짜 데이터 생성하기 (0) | 2022.07.05 |
[python] ConfigParser 이용한 외부인자 관리 (0) | 2022.06.07 |
[Python] strftime & strptime 비교 정리 (0) | 2022.05.25 |
[Python] Powerful library for EDA - Pandas Profiling (0) | 2022.05.16 |