[Pandas] 데이터프레임 멀티인덱스 다루기(loc,xs)
- Python/Pandas
- 2021. 7. 18.
판다스에서 멀티인덱서 다루는 방법입니다.
제가 이전에 groupby에 대해 써놓은 게 있는데 그 상황에서 멀티인덱서를 다뤄보겠습니다.
두가지 방법으로 loc,xs가 있긴 하지만 사실상 실제적으로 많이 쓰는 건 xs입니다.
loc인 경우 싱글인덱스일때 쓰는 방식인데 그걸 멀티인덱스에 그대로 적용하면 한계가 있습니다.
하나씩 살펴보겟습니다.
먼저 데이터를 불러오겠습니다.
df
일단 Quarter와 Month odd_even 을 멀티인덱스로 잡으면 다음과 같이 나옵니다.
groups_two = df.groupby(['Quarter','Month odd_even'])
multi_index = groups_two.first()
multi_index
인덱스를 봐도 멀티인덱스로 되어있습니다.
multi_index.index
loc,xs로 범주별로 재정리를 해봅시다.
loc
loc는 가장 큰 class별 로우로 나눌 때 씁니다.
싱글인덱스에서의 loc과 같은 역할입니다.
현 상황에서는 'Quarter' 별로 나눠지게 됩니다.
multi_index.loc['Q1']
Month odd_even으로 나누고 싶지만 불가능합니다.
왜냐하면 현재 데이터프레임은 가장 큰 클래스인 Quater의 구분 안에서 나눠진 groupby 이기 때문에 loc로 접근이 불가능합니다.
multi_index.loc['Even']
xs
Even과 Odd별로 보고 싶다면 xs를 사용합니다.
xs는 멀티인덱스에 가장 적합한데 xs에서는 멀티인덱서의 인덱스를 level로 표현합니다.
level에 따라 인덱스 지정을 해줄 수 있습니다.
현 데이터는 Quarter와 Month odd_even로 level 두개로 나눠져 있는 상황입니다.
xs로 인덱스를 Even으로 나누보면 각 Quarter당 Even의 데이터가 나옵니다.
multi_index.xs('Even',level='Month odd_even')
xs의 개념을 적용하면 위에서 한 loc도 커버가 가능합니다.
multi_index.xs('Q1',level='Quarter')
멀티인덱스를 쓴다면 loc는 안 하고 바로 xs로 해서 level 지정으로 해서 오류없이 안전하게 코딩을 하는게 좋아보입니다.
관련포스팅
[Python/Pandas] - [Pandas] 같은 범주로 묶기(groupby)
[Python/Pandas] - [Pandas] DataFrame 특정 row 선택하는 두가지 방법
'Python > Pandas' 카테고리의 다른 글
[Pandas]데이터프레임 로우와 컬럼 바꾸기(df.T) (0) | 2021.07.25 |
---|---|
[Pandas] 문자열을 여러개의 컬럼으로 나누기 (0) | 2021.07.24 |
[Pandas] 어디까지 열 수 있니?(I/O with pandas) (4) | 2021.06.25 |
[Pandas] 데이터프레임 정렬하기(sort_index,sort_values) (0) | 2021.06.12 |
[Pandas]Rolling Statistics (0) | 2021.06.04 |