Pandas6

지두의 개발자 도전기·2025년 3월 12일

Pandas

목록 보기
7/9
post-thumbnail

다중 인덱스

1. 시리즈 계층 인덱싱

다중 인덱스 사용 시리즈

  • 다중 인덱스(MultiIndex)는 여러 단계로 구성된 인덱스를 의미하며, 계층적으로 데이터를 관리할 수 있음.
  • pd.Series에서 다중 인덱스를 생성할 때 pd.MultiIndex.from_tuples()를 사용함.
  • 다중 인덱스를 활용하면 그룹별 데이터를 보다 직관적으로 표현할 수 있음.

기본 코드:

import pandas as pd
import numpy as np

index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)])
s = pd.Series([10, 20, 30, 40], index=index)
print(s)

출력:

A  1    10
   2    20
B  1    30
   2    40
dtype: int64

시리즈 인덱싱 & 슬라이싱

0-레벨 인덱싱

  • 최상위 레벨의 값을 기준으로 슬라이싱 가능.
print(s['A'])

출력:

1    10
2    20
dtype: int64

0-레벨과 1-레벨 동시 인덱싱 (loc 속성 사용)

  • 특정 레벨 값을 함께 지정하여 접근 가능.
print(s.loc['A', 1])

출력:

10

팬시 인덱싱

  • 여러 개의 값을 한 번에 선택 가능.
print(s.loc[['A', 'B']])

출력:

A  1    10
   2    20
B  1    30
   2    40
dtype: int64

2. 스택과 언스택

스택(Stack)

  • 다중 인덱스를 컬럼에서 행 인덱스로 변환하는 과정.
df = s.unstack()
print(df)

출력:

     1   2
A   10  20
B   30  40

언스택(Unstack)

  • 행 인덱스를 다시 컬럼으로 변환하는 과정.
print(df.stack())

출력:

A  1    10
   2    20
B  1    30
   2    40
dtype: int64

3. 데이터프레임 계층 인덱싱

다중 행/열 인덱스 사용

  • pd.MultiIndex.from_product()를 사용하여 다중 행 및 열 인덱스를 생성할 수 있음.
columns = pd.MultiIndex.from_product([['X', 'Y'], ['A', 'B']])
df = pd.DataFrame(np.arange(16).reshape(4, 4), index=index, columns=columns)
print(df)

4. 다중 인덱스 레벨 교환과 정렬

레벨 교환

  • swaplevel()을 사용하여 인덱스의 레벨을 교환할 수 있음.
print(df.swaplevel())

인덱스 라벨 정렬

  • sort_index()를 사용하여 정렬 가능.
print(df.sort_index())

5. 레벨 단위 그룹화

  • groupby(level=0)을 사용하여 특정 레벨 기준으로 그룹화 가능.
print(df.groupby(level=0).sum())

6. 인덱스 지정과 초기화

set_index() 메소드

  • 특정 열을 인덱스로 설정 가능.
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'], 'B': [1, 2, 3]})
df.set_index('A', inplace=True)
print(df)

출력:

     B
A
foo  1
bar  2
baz  3

reset_index() 메소드

  • 기존 인덱스를 제거하고 열로 변환.
df.reset_index(inplace=True)
print(df)

출력:

     A  B
0  foo  1
1  bar  2
2  baz  3

drop=True 옵션

  • 인덱스를 삭제하고 열로 변환하지 않음.
df.reset_index(drop=True, inplace=True)
print(df)

출력:

   B
0  1
1  2
2  3

7. 모양 변환의 항목 재배열

스택과 언스택

  • dropna=False 옵션을 사용하면 NaN 값도 유지됨.
print(df.stack(dropna=False))

8. 테이블 데이터셋에서 긴 형태의 데이터 프레임 생성

  • pop() 메소드 사용 시 주의해야 함.
df['C'] = [10, 20, 30]
removed_column = df.pop('C')
print(df)

출력:

     A  B
0  foo  1
1  bar  2
2  baz  3

9. 피버팅과 언피버팅

피버팅 (pivot())

  • 하나 또는 두 개의 열을 기준으로 변환 가능.
df = pd.DataFrame({'A': ['X', 'X', 'Y', 'Y'], 'B': [1, 2, 1, 2], 'C': [10, 20, 30, 40]})
pivot_df = df.pivot(index='A', columns='B', values='C')
print(pivot_df)

출력:

B   1   2
A
X  10  20
Y  30  40

pd.melt() 함수

  • id_vars 키워드 인자를 활용하여 변환.
melted_df = pd.melt(df, id_vars=['A'])
print(melted_df)

출력:

   A variable  value
0  X        B      1
1  X        B      2
2  Y        B      1
3  Y        B      2
4  X        C     10
5  X        C     20
6  Y        C     30
7  Y        C     40

pivot()unstack() 비교

  • set_index()unstack()을 연속 적용한 결과와 동일함.
print(df.set_index(['A', 'B']).unstack())

0개의 댓글