Skip to content

Commit 0595b3c

Browse files
committed
Modity the case for duplicate index
1 parent 728ec8b commit 0595b3c

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

pandas/core/indexes/interval.py

+15-10
Original file line numberDiff line numberDiff line change
@@ -1102,19 +1102,24 @@ def intersection(self, other, sort=False):
11021102
'objects that have compatible dtypes')
11031103
raise TypeError(msg)
11041104

1105-
try:
1105+
if self.left.is_unique and self.right.is_unique:
11061106
lindexer = self.left.get_indexer(other.left)
11071107
rindexer = self.right.get_indexer(other.right)
1108-
except Exception:
1108+
match = (lindexer == rindexer) & (lindexer != -1)
1109+
indexer = lindexer.take(match.nonzero()[0])
1110+
taken = self.take(indexer)
1111+
else:
11091112
# duplicates
1110-
lindexer = algos.unique1d(
1111-
self.left.get_indexer_non_unique(other.left)[0])
1112-
rindexer = algos.unique1d(
1113-
self.right.get_indexer_non_unique(other.right)[0])
1114-
1115-
match = (lindexer == rindexer) & (lindexer != -1)
1116-
indexer = lindexer.take(match.nonzero()[0])
1117-
taken = self.take(indexer)
1113+
lmiss = other.left.get_indexer_non_unique(self.left)[1]
1114+
lindexer = np.setdiff1d(np.arange(len(self)), lmiss)
1115+
rmiss = other.right.get_indexer_non_unique(self.right)[1]
1116+
rindexer = np.setdiff1d(np.arange(len(self)), rmiss)
1117+
indexer = np.intersect1d(lindexer, rindexer)
1118+
taken = self[indexer]
1119+
1120+
#match = (lindexer == rindexer) & (lindexer != -1)
1121+
#indexer = lindexer.take(match.nonzero()[0])
1122+
#taken = self.take(indexer)
11181123

11191124
if sort is None:
11201125
taken = taken.sort_values()

0 commit comments

Comments
 (0)