@@ -1102,25 +1102,35 @@ def intersection(self, other, sort=False):
1102
1102
raise TypeError (msg )
1103
1103
1104
1104
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 )
1110
1106
else :
1111
1107
# 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 )
1118
1109
1119
1110
if sort is None :
1120
1111
taken = taken .sort_values ()
1121
1112
1122
1113
return taken
1123
1114
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
+
1124
1134
def _setop (op_name , sort = None ):
1125
1135
def func (self , other , sort = sort ):
1126
1136
other = self ._as_like_interval_index (other )
0 commit comments