본문 바로가기

Data Science/Pandas

데이터 재구조화 (pivot_table, melt)

728x90

데이터를 다룰 때 데이터의 구조를 바꿔서 처리해야 하는 경우가 많습니다. 이번 포스팅에서는 데이터를 재구조화하여 데이터의 형태를 변경하는 방법을 배워보겠습니다.


Pivot Table

Pivot table은 원본 데이터에서 원하는 열만 선택하여 행과 열에 배치해 새로운 형태의 테이블을 만들어 줍니다. 즉, 원본 데이터에서 새로운 형태의 데이터(피벗 테이블)를 만들 때, 피벗 테이블의 index, column, value로 사용할 열을 선택하여 재구조화할 수 있습니다.

 

 

아래의 함수를 사용하여 pivot table 기능을 사용할 수 있습니다.


DataFrame.pivot_table(index=None, columns=None, values=None, aggfunc='mean')

  • index: 피벗 테이블에서 인덱스가 될 컬럼의 이름 혹은 여러 개일 경우 리스트
  • columns: 피벗 테이블에서 컬럼으로 분리할 컬럼의 이름 (범주형 변수)
  • values: 피벗 테이블에서 columns의 값이 될 컬럼의 이름
  • aggfunc: 집계함수를 사용할 경우 지정

아래 코드를 통해 확인해 보겠습니다.

피벗 테이블의 인덱스를 Multi-Index로 구성하였고, columns 속성에는 범주형 변수를 가진 컬럼을 넣었으며, values에는 피벗 테이블의 행과 열에 따라 나타내고 싶은 데이터를 넣어주었습니다.

 


 


Melt

이번에는 Melt에 대해서 알아보겠습니다. Melt는 Pivot Table과 약간은 반대의 기능을 한다고 생각하시면 됩니다. Pivot Table은 수직으로 쌓여있는 데이터를 수평으로 확장하는 반면, Melt는 수평으로 확장되어 있는 데이터를 수직으로 쌓인 형태로 바꿔줍니다. 

 

즉, 컬럼으로 나열된 자료를 variable과 value 컬럼으로 압축하는 역할을 합니다. 위에서 만든 피벗 테이블을 Melt를 이용하여 다시 원본 데이터로 되돌려 보겠습니다.

 


DataFrame.melt(id_vars=None, var_name=None, value_name=None)

  • id_vars: 피벗 테이블에서 인덱스가 될 컬럼의 이름 (variable, value의 내용으로 들어가지 않을 컬럼의 이름 리스트)
  • var_name: variable 변수의 이름으로 지정할 문자열
  • value_name: value 변수의 이름으로 지정할 문자열

첫 번째 테이블은 원본 테이블이고, 2번째 테이블은 위에서 pivot_table을 적용한 결과입니다. 마지막 테이블은 melt 함수를 이용하여 원본 테이블과 비슷한 결과로 되돌려 놓은 결과입니다.

 


 

var_name과 value_name에 gender, score 대신 '성별', '성적'으로 값을 넣어서 각각의 속성이 어떤 역할을 하는지 쉽게 파악하도록 하였습니다. 

 

 

출처

[데싸라면, 빨간색 물고기, 자투리코드] 파이썬 한권으로 끝내기: 데이터분석전문가(ADP) + 빅데이터분석기사 실기대비, 시대고시기획(2022), p52-54)

728x90
반응형

'Data Science > Pandas' 카테고리의 다른 글

PCA - 차원 축소  (0) 2023.08.31
날짜 데이터 핸들링 (datetime)  (0) 2023.08.30
Concat, Append와 Join, Merge  (0) 2023.08.30
데이터 정렬  (0) 2023.08.30
조건식을 이용한 데이터 탐색 및 결측값 다루기  (0) 2023.08.29