Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – DataFrame 다중 레벨 열(Multi-level Columns) 쌓기

Pandas DataFrame에서 다중 레벨(multi-level) 열을 쌓으려면 stack() 메서드를 사용합니다. stack()은 열(column)을 행(row) 아래쪽으로 회전시켜 와이드(wide) 형식의 데이터를 롱(long) 형식으로 변환해 주는 유용한 기능입니다.

1. 라이브러리 불러오기

먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

2. 다중 레벨 열 생성하기

pd.MultiIndex.from_tuples()를 사용해 튜플 목록으로 다중 레벨 열을 만듭니다. 여기서는 최상위 레벨이 'Maths', 하위 레벨이 세부 과목인 구조를 구성했습니다.

items = pd.MultiIndex.from_tuples([
    ('Maths', 'Mental Maths'),
    ('Maths', 'Discrete Mathematics'),
    ('Maths', 'Applied Mathematics')
])

3. DataFrame 생성하기

이제 앞에서 정의한 다중 레벨 열을 columns 인자에 지정하여 DataFrame을 생성합니다. 행 인덱스는 학생 이름으로 설정합니다.

dataFrame = pd.DataFrame(
    [[67, 86, 78],
     [56, 92, 97],
     [92, 95, 91]],
    index=['John', 'Tom', 'Henry'],
    columns=items
)

4. 다중 레벨 열 쌓기

stack() 메서드를 호출하면 가장 안쪽 열 레벨이 가장 안쪽 행 레벨로 피벗되어, 학생별 과목 점수가 세로로 길게 재구성됩니다.

dataFrame.stack()

전체 예제 코드

다음은 지금까지의 과정을 모두 포함한 완전한 코드입니다.

import pandas as pd

# 다중 레벨 열 생성
items = pd.MultiIndex.from_tuples([
    ('Maths', 'Mental Maths'),
    ('Maths', 'Discrete Mathematics'),
    ('Maths', 'Applied Mathematics')
])

# DataFrame 생성
dataFrame = pd.DataFrame(
    [[67, 86, 78],
     [56, 92, 97],
     [92, 95, 91]],
    index=['John', 'Tom', 'Henry'],
    columns=items
)

# DataFrame 출력
print("DataFrame...\n", dataFrame)

# 다중 레벨 열 쌓기
print("\nStacking...\n", dataFrame.stack())

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

DataFrame...
              Maths
      Mental Maths Discrete Mathematics Applied Mathematics
John             67                   86                  78
Tom              56                   92                  97
Henry            92                   95                  91

Stacking...
                            Maths
John  Applied Mathematics       78
      Discrete Mathematics      86
      Mental Maths              67
Tom   Applied Mathematics       97
      Discrete Mathematics      92
      Mental Maths              56
Henry Applied Mathematics       91
      Discrete Mathematics      95
      Mental Maths              92

정리: stack() 메서드의 동작 원리

stack()은 DataFrame의 마지막(가장 안쪽) 열 레벨을 행 인덱스의 하위 레벨로 이동시킵니다. 그 결과 각 학생 이름 아래에 세부 과목이 새로운 인덱스로 배치되고, 데이터가 세로 방향으로 길어진 멀티 인덱스 Series가 반환됩니다. 반대로 쌓여 있는 구조를 다시 넓은 형태로 펼치고 싶다면 unstack() 메서드를 사용하면 됩니다. 두 메서드는 서로 역연산 관계에 있으므로 함께 익혀두면 데이터 재구성 작업이 한결 수월해집니다.