레이블이 여러 개의 간격(interval)에 동시에 속해 있을 때, 해당 레이블과 관련된 모든 간격의 위치를 확인하려면 Pandas의 get_loc() 메서드를 사용하면 됩니다. 이 메서드는 주어진 값이 IntervalIndex의 어떤 간격에 포함되는지를 불리언(Boolean) 배열 형태로 반환하기 때문에, 간격이 서로 겹쳐 있는 경우에도 한눈에 파악할 수 있습니다.
라이브러리 임포트
가장 먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
Interval 객체 생성
세 개의 Interval 객체를 생성합니다. pd.Interval은 기본적으로 왼쪽 경계는 열리고(open) 오른쪽 경계는 닫히는(closed) 형태, 즉 (50, 75]와 같은 반개구간으로 만들어집니다.
interval1 = pd.Interval(50, 75) interval2 = pd.Interval(75, 90) interval3 = pd.Interval(50, 90)
IntervalIndex 생성
생성한 세 개의 간격을 묶어 IntervalIndex를 만듭니다.
index = pd.IntervalIndex([interval1, interval2, interval3])
관련 간격의 위치 조회
get_loc() 메서드에 확인하고자 하는 레이블 값을 전달하면, 해당 값이 포함된 모든 간격의 위치를 불리언 배열로 얻을 수 있습니다.
print("\nGet the locations of all the relevant interval...\n", index.get_loc(65))
전체 예제 코드
다음은 지금까지의 과정을 정리한 전체 코드입니다.
import pandas as pd
# 세 개의 Interval 객체 생성
interval1 = pd.Interval(50, 75)
interval2 = pd.Interval(75, 90)
interval3 = pd.Interval(50, 90)
# 각 간격 출력
print("Interval1...\n", interval1)
print("Interval2...\n", interval2)
print("Interval3...\n", interval3)
# 세 개의 간격으로 IntervalIndex 생성
index = pd.IntervalIndex([interval1, interval2, interval3])
# 레이블이 여러 간격에 속할 때 관련된 모든 간격의 위치 조회
print("\nGet the locations of all the relevant interval...\n", index.get_loc(65))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Interval1... (50, 75] Interval2... (75, 90] Interval3... (50, 90] Get the locations of all the relevant interval... [ True False True]
결과 해석
출력된 [True, False, True] 배열은 조회한 값 65가 첫 번째 간격 (50, 75]과 세 번째 간격 (50, 90]에는 포함되지만, 두 번째 간격 (75, 90]에는 포함되지 않음을 의미합니다. 즉, 인덱스 위치 0과 2에 해당하는 간격이 65를 포함하고 있는 것입니다.
이처럼 get_loc() 메서드는 간격이 서로 겹쳐 있는 IntervalIndex에서도 특정 값이 속한 모든 위치를 불리언 마스크 형태로 손쉽게 반환해 주므로, 복잡한 구간 데이터를 다룰 때 매우 유용하게 활용할 수 있습니다.