@@ -3089,8 +3089,6 @@ def _intersection(self, other: Index, sort=False):
3089
3089
"""
3090
3090
intersection specialized to the case with matching dtypes.
3091
3091
"""
3092
- # TODO(EA): setops-refactor, clean all this up
3093
-
3094
3092
if self .is_monotonic and other .is_monotonic :
3095
3093
try :
3096
3094
result = self ._inner_indexer (other )[0 ]
@@ -3109,6 +3107,7 @@ def _wrap_intersection_result(self, other, result):
3109
3107
# We will override for MultiIndex to handle empty results
3110
3108
return self ._wrap_setop_result (other , result )
3111
3109
3110
+ @final
3112
3111
def _intersection_via_get_indexer (self , other : Index , sort ) -> ArrayLike :
3113
3112
"""
3114
3113
Find the intersection of two Indexes using get_indexer.
@@ -3184,9 +3183,10 @@ def difference(self, other, sort=None):
3184
3183
return self .rename (result_name )
3185
3184
3186
3185
result = self ._difference (other , sort = sort )
3187
- return self ._wrap_setop_result (other , result )
3186
+ return self ._wrap_difference_result (other , result )
3188
3187
3189
3188
def _difference (self , other , sort ):
3189
+ # overridden by RangeIndex
3190
3190
3191
3191
this = self .unique ()
3192
3192
@@ -3199,6 +3199,11 @@ def _difference(self, other, sort):
3199
3199
3200
3200
return the_diff
3201
3201
3202
+ def _wrap_difference_result (self , other , result ):
3203
+ # We will override for MultiIndex to handle empty results
3204
+ return self ._wrap_setop_result (other , result )
3205
+
3206
+ @final
3202
3207
def symmetric_difference (self , other , result_name = None , sort = None ):
3203
3208
"""
3204
3209
Compute the symmetric difference of two Index objects.
@@ -3246,6 +3251,16 @@ def symmetric_difference(self, other, result_name=None, sort=None):
3246
3251
3247
3252
if result_name is not None :
3248
3253
result = result .rename (result_name )
3254
+
3255
+ if self ._is_multi and len (result ) == 0 :
3256
+ # On equal symmetric_difference MultiIndexes the difference is empty.
3257
+ # Therefore, an empty MultiIndex is returned GH#13490
3258
+ return type (self )(
3259
+ levels = [[] for _ in range (self .nlevels )],
3260
+ codes = [[] for _ in range (self .nlevels )],
3261
+ names = result .names ,
3262
+ )
3263
+
3249
3264
return result
3250
3265
3251
3266
@final
0 commit comments