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

Python Pandas IntervalArray – 열린 끝점만 공유하는 간격의 겹침 여부 확인하기

Pandas에서 overlaps() 메서드를 사용하면 특정 간격(Interval)과 열린 끝점만 공유하는 간격들이 서로 겹치는지 여부를 손쉽게 확인할 수 있습니다.

기본 개념

두 간격은 닫힌(closed) 끝점을 포함하여 공통 지점을 하나라도 공유할 때 '겹친다'고 판단합니다. 반면, 한쪽 끝점이 열려(open) 있다면 해당 끝점 자체는 포함되지 않으므로 겹침 판정 결과가 달라질 수 있습니다.

라이브러리 임포트

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

import pandas as pd

IntervalArray 생성

튜플 리스트로부터 IntervalArray를 생성합니다.

intervals = pd.arrays.IntervalArray.from_tuples([(10, 20), (20, 35)])

생성된 IntervalArray를 출력해 내용을 확인합니다.

print("IntervalArray...\n", intervals)

겹침 여부 확인

이제 열린 끝점만 공통으로 가지는 간격과의 겹침 여부를 확인합니다. closed 매개변수에 'right' 값을 지정하여 오른쪽 끝점만 닫힌 간격을 만들었습니다.

print("\n열린 끝점만 공유하는 간격과 겹치는지 여부...\n",
      intervals.overlaps(pd.Interval(20, 25, closed='right')))

전체 예제 코드

import pandas as pd

# 두 간격은 닫힌 끝점을 포함한 공통 지점을 공유할 때 겹칩니다.
# IntervalArray 생성
intervals = pd.arrays.IntervalArray.from_tuples([(10, 20), (20, 35)])

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

# 각 간격의 길이 출력
print("\n간격 길이...\n", intervals.length)

# 열린 끝점만 공유하는 간격과의 겹침 여부 확인
# closed 매개변수에 'right' 값을 지정하여 오른쪽 끝점만 닫힌 간격 사용
print("\n열린 끝점만 공유하는 간격과 겹치는지 여부...\n",
      intervals.overlaps(pd.Interval(20, 25, closed='right')))

실행 결과

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

IntervalArray...
<IntervalArray>
[(10, 20], (20, 35]]
Length: 2, dtype: interval[int64, right]

간격 길이...
Int64Index([10, 15], dtype='int64')

열린 끝점만 공유하는 간격과 겹치는지 여부...
[False True]

결과 해석

첫 번째 간격 (10, 20]은 왼쪽 끝점 10이 열려 있고 오른쪽 끝점 20이 닫혀 있습니다. 비교 대상인 [20, 25]와는 20이라는 지점을 공유하지만, 첫 번째 간격에서 20은 닫힌 끝점이므로 실제로는 포함됩니다. 그러나 이 예제에서 첫 번째 간격은 False로 나타난 이유는 간격 표기 방식에 따라 경계 처리가 달라지기 때문입니다. 반면 두 번째 간격 (20, 35]는 왼쪽 끝점 20이 열려 있어 [20, 25]와 20을 공유하지만, 열린 끝점은 포함되지 않는 것처럼 보임에도 True가 반환됩니다. 이는 overlaps() 메서드가 닫힌 끝점을 기준으로 공통 지점 존재 여부를 판단하기 때문이며, 간격의 closed 설정에 따라 결과가 어떻게 달라지는지 이해하는 것이 중요합니다.