Skip to content

Commit 5a231b8

Browse files
committed
PERF: perform a unique intersection with IntervalIndex if at least one side is unique
1 parent cdc07fd commit 5a231b8

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

asv_bench/benchmarks/index_object.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ def setup(self, N):
196196
self.intv = IntervalIndex.from_arrays(left, right)
197197
self.intv._engine
198198

199+
self.intv2 = IntervalIndex.from_arrays(left + 1, right + 1)
200+
self.intv2._engine
201+
199202
self.left = IntervalIndex.from_breaks(np.arange(N))
200203
self.right = IntervalIndex.from_breaks(np.arange(N - 3, 2 * N - 3))
201204

@@ -208,8 +211,11 @@ def time_is_unique(self, N):
208211
def time_intersection(self, N):
209212
self.left.intersection(self.right)
210213

211-
def time_intersection_duplicate(self, N):
214+
def time_intersection_one_duplicate(self, N):
212215
self.intv.intersection(self.right)
213216

217+
def time_intersection_both_duplicate(self, N):
218+
self.intv.intersection(self.intv2)
219+
214220

215221
from .pandas_vb_common import setup # noqa: F401

pandas/core/indexes/interval.py

+2
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,8 @@ def overlaps(self, other):
11431143
def intersection(self, other, sort=False):
11441144
if self.left.is_unique and self.right.is_unique:
11451145
taken = self._intersection_unique(other)
1146+
elif other.left.is_unique and other.right.is_unique:
1147+
taken = other._intersection_unique(self)
11461148
else:
11471149
# duplicates
11481150
taken = self._intersection_non_unique(other)

0 commit comments

Comments
 (0)