Skip to content

Commit b212dd9

Browse files
committed
Split the intersection into two sub-functions
1 parent 6907a27 commit b212dd9

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

pandas/core/indexes/interval.py

+21-11
Original file line numberDiff line numberDiff line change
@@ -1102,25 +1102,35 @@ def intersection(self, other, sort=False):
11021102
raise TypeError(msg)
11031103

11041104
if self.left.is_unique and self.right.is_unique:
1105-
lindexer = self.left.get_indexer(other.left)
1106-
rindexer = self.right.get_indexer(other.right)
1107-
match = (lindexer == rindexer) & (lindexer != -1)
1108-
indexer = lindexer.take(match.nonzero()[0])
1109-
taken = self.take(indexer)
1105+
taken = self._intersection_unique(other)
11101106
else:
11111107
# duplicates
1112-
lmiss = other.left.get_indexer_non_unique(self.left)[1]
1113-
rmiss = other.right.get_indexer_non_unique(self.right)[1]
1114-
import functools
1115-
indexer = functools.reduce(np.setdiff1d, (np.arange(len(self)),
1116-
lmiss, rmiss))
1117-
taken = self[indexer]
1108+
taken = self._intersection_non_unique(other)
11181109

11191110
if sort is None:
11201111
taken = taken.sort_values()
11211112

11221113
return taken
11231114

1115+
def _intersection_unique(self, other):
1116+
lindexer = self.left.get_indexer(other.left)
1117+
rindexer = self.right.get_indexer(other.right)
1118+
1119+
match = (lindexer == rindexer) & (lindexer != -1)
1120+
indexer = lindexer.take(match.nonzero()[0])
1121+
1122+
return self.take(indexer)
1123+
1124+
def _intersection_non_unique(self, other):
1125+
lmiss = other.left.get_indexer_non_unique(self.left)[1]
1126+
rmiss = other.right.get_indexer_non_unique(self.right)[1]
1127+
1128+
import functools
1129+
indexer = functools.reduce(np.setdiff1d, (np.arange(len(self)),
1130+
lmiss, rmiss))
1131+
1132+
return self[indexer]
1133+
11241134
def _setop(op_name, sort=None):
11251135
def func(self, other, sort=sort):
11261136
other = self._as_like_interval_index(other)

0 commit comments

Comments
 (0)