[파이썬] pandas에서 데이터 재구성 (melt, stack, unstack)

데이터 분석 작업에서는 종종 데이터의 형태를 재구성해야 할 때가 있습니다. 이러한 데이터 재구성은 pandas 라이브러리를 사용하여 간단하게 수행할 수 있습니다. 이번 블로그 포스트에서는 pandas에서 제공하는 melt, stack, unstack 함수를 사용하여 데이터를 재구성하는 방법을 알아보겠습니다.

melt 함수

melt 함수는 데이터프레임의 열을 행으로 변환하는 기능을 제공합니다. 이 함수는 데이터의 규칙적인 형태를 유지하며, 특정 열을 기준으로 데이터를 재구성할 수 있습니다.

다음은 melt 함수를 사용하여 데이터프레임을 재구성하는 예제 코드입니다.

import pandas as pd

# 재구성할 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [4, 5, 6],
                   'C': [7, 8, 9]})

# melt 함수를 사용하여 데이터프레임 재구성
melted_df = df.melt()

print(melted_df)

위의 코드는 다음과 같은 출력을 생성합니다.

  variable  value
0        A      1
1        A      2
2        A      3
3        B      4
4        B      5
5        B      6
6        C      7
7        C      8
8        C      9

위의 코드에서 melt 함수를 사용해서 데이터프레임의 열이 행으로 변환됐음을 확인할 수 있습니다. 열의 이름은 variable 열로, 해당 열의 값은 value 열로 이동했습니다.

stack 함수

stack 함수는 데이터프레임의 열을 새로운 인덱스 레벨로 옮기는 기능을 제공합니다. 이 함수를 사용하면 열에서 인덱스로 이동하는 효과를 얻을 수 있습니다.

다음은 stack 함수를 사용하여 데이터프레임을 재구성하는 예제 코드입니다.

import pandas as pd

# 재구성할 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [4, 5, 6],
                   'C': [7, 8, 9]})

# stack 함수를 사용하여 데이터프레임 재구성
stacked_df = df.stack()

print(stacked_df)

위의 코드는 다음과 같은 출력을 생성합니다.

0  A    1
   B    4
   C    7
1  A    2
   B    5
   C    8
2  A    3
   B    6
   C    9
dtype: int64

위의 코드에서 stack 함수를 사용해서 데이터프레임의 열이 인덱스 레벨로 이동했음을 확인할 수 있습니다. 예를 들어, (0, A)는 첫 번째 행의 A 열의 값입니다.

unstack 함수

unstack 함수는 stack 함수와 반대로 작동합니다. 이 함수는 인덱스 레벨에서 열로 이동시켜 데이터프레임을 재구성하는 기능을 제공합니다. 데이터프레임에서 한 번 이상 stack 함수를 적용한 경우, unstack 함수를 사용하여 원래의 형태로 데이터를 복구할 수 있습니다.

다음은 unstack 함수를 사용하여 데이터프레임을 재구성하는 예제 코드입니다.

import pandas as pd

# 재구성할 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [4, 5, 6],
                   'C': [7, 8, 9]})

# stack 함수를 두 번 적용하여 데이터프레임 재구성
stacked_df = df.stack().stack()

# unstack 함수를 사용하여 데이터프레임 원래 형태로 복구
unstacked_df = stacked_df.unstack()

print(unstacked_df)

위의 코드는 다음과 같은 출력을 생성합니다.

   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

위의 코드에서 stack 함수를 두 번 적용하여 데이터프레임을 재구성한 후, unstack 함수를 사용하여 원래 형태로 복구한 것을 확인할 수 있습니다.

이제부터는 pandas에서 데이터의 재구성을 위해 melt, stack, unstack 함수를 사용할 때 어떤 매개변수를 사용하고 중요한 사항들에 대해 자세히 알아볼 것입니다.