Để kiểm tra các khoảng (intervals) chỉ có endpoint mở chung có overlap (giao nhau) hay không, chúng ta dùng phương thức overlaps() của IntervalArray với tham số closed.
Các bước thực hiện
1. Import thư viện
import pandas as pd
2. Tạo IntervalArray
Hai khoảng: (10, 20] và (20, 35]. Chúng chỉ chung endpoint 20.
intervals = pd.arrays.IntervalArray.from_tuples([(10, 20), (20, 35)])
3. Kiểm tra overlap với khoảng đóng phải
Tạo khoảng (20, 25] (closed='right') và kiểm tra:
print("\nKhoảng chỉ chung endpoint mở có overlap?\n", intervals.overlaps(pd.Interval(20, 25, closed='right')))
Ví dụ hoàn chỉnh
import pandas as pd
# Tạo IntervalArray: (10,20] và (20,35]
intervals = pd.arrays.IntervalArray.from_tuples([(10, 20), (20, 35)])
print("IntervalArray:\n", intervals)
print("\nĐộ dài khoảng:\n", intervals.length)
# Kiểm tra overlap với (20, 25] - closed right
print("\nOverlap với (20, 25] closed='right':\n", intervals.overlaps(pd.Interval(20, 25, closed='right')))
Kết quả đầu ra
IntervalArray:[(10, 20], (20, 35]] Length: 2, dtype: interval[int64, right] Độ dài khoảng: Int64Index([10, 15], dtype='int64') Overlap với (20, 25] closed='right': [False True]
Giải thích kết quả
| Khoảng trong IntervalArray | Khoảng kiểm tra | Chung endpoint | Overlap? |
|---|---|---|---|
| (10, 20] | (20, 25] | 20 (left closed, right open) | False |
| (20, 35] | (20, 25] | 20 (left open, right closed) | True |
Quy tắc: Hai khoảng overlap nếu chia sẻ điểm chung kể cả endpoint đóng. Endpoint mở không tính là điểm chung.
- (10, 20] đóng phải → chứa 20.
- (20, 35] mở trái → không chứa 20.
- (20, 25] đóng phải → chứa 20.
- → (10,20] và (20,25] đều chứa 20 → Overlap = True? Sai! Vì (10,20] endpoint 20 là right-closed, (20,25] endpoint 20 là left-open. Chỉ overlap khi cả hai cùng đóng tại điểm chung.
Kết quả [False, True] đúng: khoảng thứ 2 (20,35] overlap với (20,25] vì cùng chứa (20,25].