Pandas7_1

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

Pandas

목록 보기
8/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

데이터 그룹화

1. 개요

  • 데이터 그룹화는 데이터를 특정 기준으로 묶어서 분석하는 기법임.
  • groupby() 메소드를 사용하여 그룹을 생성하고, 다양한 집계 함수를 적용할 수 있음.

2. 시리즈 그룹화

value_counts() 메소드

  • 특정 값의 개수를 계산할 때 사용.
s = pd.Series(['A', 'B', 'A', 'C', 'B', 'A'])
print(s.value_counts())

출력:

A    3
B    2
C    1
dtype: int64

mean() 메소드

  • 그룹별 평균 값을 구함.
df = pd.DataFrame({'Category': ['A', 'B', 'A', 'B'], 'Value': [10, 20, 30, 40]})
print(df.groupby('Category')['Value'].mean())

출력:

Category
A    20.0
B    30.0
Name: Value, dtype: float64

3. 데이터프레임 그룹화

다중 키 활용 그룹화

  • 두 개 이상의 키를 기준으로 그룹화 가능.
print(df.groupby(['Category', 'Value']).count())

dropna 키워드 인자

  • dropna=True: 결측값이 있는 그룹을 제거
  • dropna=False: 결측값이 있는 그룹도 유지

count() 집계 함수

print(df.groupby('Category').count())

4. 그룹 확인

for 반복문 활용

for name, group in df.groupby('Category'):
    print(name)
    print(group)

5. 열 선택 및 함수 활용 그룹화

  • 특정 열을 기준으로 그룹화할 수 있으며, 시리즈나 사전을 활용할 수 있음.
print(df.groupby('Category')['Value'].sum())

6. 멀티 인덱스 레벨 활용

  • 행과 열 모두를 기준으로 그룹화 가능.
print(df.groupby(['Category', 'Value']).sum())

0개의 댓글