[Pandas] 데이터프레임 멀티인덱스 다루기(loc,xs)

반응형
    반응형

    판다스에서 멀티인덱서 다루는 방법입니다.

    제가 이전에 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 선택하는 두가지 방법

     

    댓글

    Designed by JB FACTORY

    ....