반응형
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
반응형
'파이썬완전정복-Pandas DataFrame > 04. 인덱싱' 카테고리의 다른 글
Pandas DataFrame 04-06. 뒤에서 n행 인덱싱 (tail) (0) | 2022.01.11 |
---|---|
Pandas DataFrame 04-05. 앞에서 n행 인덱싱 (head) (0) | 2022.01.11 |
Pandas DataFrame 04-04. 정수기반_데이터 (iloc) (0) | 2022.01.11 |
Pandas DataFrame 04-03. 정수기반_스칼라 (iat) (0) | 2022.01.11 |
Pandas DataFrame 04-02. 레이블기반_데이터 (loc) (0) | 2022.01.11 |