Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas - 분할 배열로 생성한 IntervalArray의 값과 Interval이 겹치는지 요소별로 확인하기

분할 배열(breaks 배열)로 생성한 IntervalArray의 각 구간과 특정 Interval이 겹치는지 요소별(elementwise)로 확인하려면 array.overlaps() 메서드를 사용합니다.

필요한 라이브러리 임포트

가장 먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

구간 겹침(Overlap)의 조건

두 구간(interval)은 닫힌 끝점(closed endpoint)을 포함하여 공통 지점을 하나라도 공유할 때 서로 겹친다고 판단합니다. 반대로, 열린 끝점(open endpoint)만 공유하는 경우에는 겹치지 않는 것으로 간주됩니다.

IntervalArray 생성

이제 from_breaks() 메서드를 사용하여 분할 배열로부터 새로운 IntervalArray를 생성합니다.

array = pd.arrays.IntervalArray.from_breaks([0, 1, 2, 3, 4, 5])

생성된 구간들을 화면에 출력합니다.

print("Our IntervalArray...\n", array)

겹침 여부 확인

overlaps() 메서드에 비교 대상 Interval을 전달하여 각 구간과의 겹침 여부를 확인합니다.

print("\nDoes the Interval overlaps the values in the IntervalArray", array.overlaps(pd.Interval(2.5, 3.2)))

전체 예제 코드

다음은 지금까지의 내용을 정리한 전체 코드입니다.

import pandas as pd

# 두 구간은 닫힌 끝점을 포함해 공통 지점을 공유하면 겹칩니다.
# 열린 끝점만 공유하는 구간은 겹치지 않습니다.
# 분할 배열로 새로운 IntervalArray 생성
array = pd.arrays.IntervalArray.from_breaks([0, 1, 2, 3, 4, 5])

# IntervalArray 출력
print("Our IntervalArray...\n", array)

# 겹침 여부 확인
print("\nDoes the Interval overlaps the values in the IntervalArray", array.overlaps(pd.Interval(2.5, 3.2)))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Our IntervalArray...
<IntervalArray>
[(0, 1], (1, 2], (2, 3], (3, 4], (4, 5]]
Length: 5, dtype: interval[int64, right]

Does the Interval overlaps the values in the IntervalArray [False False True True False]

결과 해석

출력 결과를 보면 Boolean 배열인 [False False True True False]가 반환되었습니다. 이는 입력한 Interval(2.5, 3.2]가 세 번째 구간인 (2, 3]과 네 번째 구간인 (3, 4]와 겹친다는 의미입니다. 나머지 구간인 (0, 1], (1, 2], (4, 5]와는 공통 지점이 없으므로 False가 반환된 것입니다. 이처럼 overlaps() 메서드는 IntervalArray의 각 구간에 대해 한 번에 겹침 여부를 벡터화된 방식으로 빠르게 판별할 수 있는 유용한 도구입니다.