melt
melt
(참고링크)가 녹이기인 만큼 이 맥락에서 보면 열을 값으로 녹여 넣는다고 보면 된다. 예를 들어서 다음과 같은 데이터가 있다고 해보자.
import pandas as pd
data = {
"이름": ["철수", "영희", "민수"],
"수학": [90, 80, 70],
"영어": [85, 95, 75],
"국어": [75, 95, 95]
}
df = pd.DataFrame(data)
그렇다면 df
는 아래와 같다.
이름 수학 영어 국어
0 철수 90 85 75
1 영희 80 95 95
2 민수 70 75 95
그런데 이제 수학, 영어로 열을 나누는 것이 아니라 과목, 점수로 열을 나누고 싶을 수 있다. 이럴 때 melt
를 사용한다.
df_melted = df.melt(id_vars=["이름"], var_name="과목", value_name="점수")
이렇게 이름은 놔두고 과목에 따른 점수를 녹여주면 df_melted
는 다음과 같아진다.
이름 과목 점수
0 철수 수학 90
1 영희 수학 80
2 민수 수학 70
3 철수 영어 85
4 영희 영어 95
5 민수 영어 75
6 철수 국어 75
7 영희 국어 95
8 민수 국어 95
각 매개변수를 하나하나 보면 다음과 같다.
id_vars
는 식별자 변수로 사용할 열의 이름이나 목록을 설정하는 매개변수이다. 즉 녹이려는 열을 제외한 모든 열을 포함시키면 된다.
value_vars
는 변환할 열의 이름이나 목록인데 기본값은 id_vars
를 제외한 모든 열이다.
var_name
은 변수열에 설정할 이름인데 기본값은 "variable"
이다. 이때 변수열은 열 이름으로 있던 값들을 값으로 만들었을 때의 열이다. 위에서는 이름을 제외한 모든 열을 변환할 열로 설정하였으므로 수학, 영어, 국어가 변수열의 값으로 들어왔다.
value_name
은 값열에 설정할 이름인데 기본값은 "value"
이다.
ignore_index
는 원본 인덱스를 무시하고 새로운 인덱스를 생성하느냐를 설정하는 매개변수로 기본값은 True
이다.
pivot
pivot
(참고링크)은 melt
의 반대되는 개념으로 melt
로 변환한 데이터나 비슷하게 생긴 데이터에 적용할 수 있다. 특정 열을 변수열로 선택하고 변수열의 값을 묶어서 열로 만들고, 그 열의 값에 대한 값을 가져올 값열을 선택하여 데이터를 재구조화할 수 있는 것이다. 예를 들어 아래와 같은 데이터가 있다고 해보자.
data = {
"이름": ["철수", "영희", "민수", "철수", "영희", "민수", "철수", "영희", "민수"],
"과목": ["수학", "수학", "수학", "영어", "영어", "영어", "국어", "국어", "국어"],
"점수": [90, 80, 70, 85, 95, 75, 75, 95, 95]
}
df = pd.DataFrame(data)
그렇다면 df
는 다음과 같다.
이름 과목 점수
0 철수 수학 90
1 영희 수학 80
2 민수 수학 70
3 철수 영어 85
4 영희 영어 95
5 민수 영어 75
6 철수 국어 75
7 영희 국어 95
8 민수 국어 95
즉 위에서 melt
로 재구조화한 데이터와 같다고 할 수 있다. 이때 melt
하기 전 상태로 만들어보자.
df_pivoted = df.pivot(index="이름", columns="과목", values="점수")
그렇다면 df_pivoted
는 다음과 같아진다.
과목 국어 수학 영어
이름
민수 95 70 75
영희 95 80 95
철수 75 90 85
완전히 처음과 같이 만들고 싶다면 인덱스를 추가해주고, 칼럼 이름을 없에주면 된다.
df_pivoted = df_pivoted.reset_index()
df_pivoted.columns.name = None
이제 각 매개변수를 하나하나 보면 다음과 같다.
columns
는 변수열로 사용할 열의 이름이나 목록을 설정한다.
index
는 인덱스로 사용할 열의 이름이나 목록을 설정한다.
value
는 값으로 사용할 열의 이름이나 목록을 설정한다. 기본값은 index
와 columns
로 지정되지 않은 나머지 열이다.
'Data Science > Pandas' 카테고리의 다른 글
[Pandas] 데이터프레임 인덱싱(loc, iloc) 및 단일값 접근(at, iat) (0) | 2025.01.17 |
---|---|
[Pandas] 데이터 연결(concatenate) 및 결합(merge), 그리고 간단 결합(join) (0) | 2024.12.30 |
[Pandas] 값 혹은 인덱스를 기준으로 데이터프레임 정렬 (0) | 2024.12.29 |
[Pandas] 판다스를 통한 데이터 시각화(data visualization) (0) | 2024.12.28 |
[Pandas] 데이터프레임 기초 통계량 확인 (0) | 2024.12.26 |