반응형

04-07. Multi Index의 경우


Multi Index의 경우에 사용하는 Indexing 기법을 알아보겠습니다.

 

예시


먼저, 아래와 같이 Multi Index를 가지는 DataFrame 객체를 만듭니다.

index_tuples = [('row1', 'val1'), ('row1', 'val2'), ('row2', 'val1'), ('row2', 'val2'), ('row2', 'val3'), ('row3', 'val2'),('row3', 'val3')]
values = [ [1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15], [16,17,18], [19,20,21]]
index = pd.MultiIndex.from_tuples(index_tuples) # 인덱스 설정
df = pd.DataFrame(values, columns=['col1', 'col2', 'col3'], index = index)
print(df)
>>
           col1  col2  col3
row1 val1     1     2     3
     val2     4     5     6
row2 val1     7     8     9
     val2    10    11    12
     val3    13    14    15
row3 val2    16    17    18
     val3    19    20    21


하나의 행을 지정할 경우 단일 index로 반환된다.

result = df.loc['row2']
print(result)
>>
      col1  col2  col3
val1     7     8     9
val2    10    11    12
val3    13    14    15


multi index에서 특정 index를 튜플로 지정할 경우 Series로 반환됩니다.
또한, 아래의 경우에서 튜플이 아니라 단일 행/열 레이블 형태로 입력하여도
같은 결과가 도출됩니다. (예 : result = df.loc[ ' row2', 'val2' ] )

result = df.loc[('row2','val2')]
print(result)
>>
col1    10
col2    11
col3    12
Name: (row2, val2), dtype: int64

만약 DataFrame 형태로 반환하고 싶다면 [ [ ] ] 형태로 인덱싱하면됩니다.

result = df.loc[[('row2','val2')]]
print(result)
>>
           col1  col2  col3
row2 val2    10    11    12

여기에 열 값까지 설정해줄 경우 해당 값을 반환할 수 있습니다.

result = df.loc[('row2','val2'), 'col3']
print(result)
>> 12


Multi Index의 튜플을 통해 슬라이스하여 인덱싱이 가능합니다.

result = df.loc[('row1','val2') : ('row3','val2')] # row1의 val2부터 row3의 val2까지
print(result)
>>
           col1  col2  col3
row1 val2     4     5     6
row2 val1     7     8     9
     val2    10    11    12
     val3    13    14    15
row3 val2    16    17    18
반응형

+ 최근 글