@@ -3246,33 +3246,13 @@ def symmetric_difference(self, other, result_name=None, sort=None):
3246
3246
if result_name is None :
3247
3247
result_name = result_name_update
3248
3248
3249
- if not self ._should_compare (other ):
3250
- return self .union (other , sort = sort ).rename (result_name )
3251
- elif not is_dtype_equal (self .dtype , other .dtype ):
3252
- dtype = find_common_type ([self .dtype , other .dtype ])
3253
- this = self .astype (dtype , copy = False )
3254
- that = other .astype (dtype , copy = False )
3255
- return this .symmetric_difference (that , sort = sort ).rename (result_name )
3256
-
3257
- this = self ._get_unique_index ()
3258
- other = other ._get_unique_index ()
3259
- indexer = this .get_indexer_for (other )
3249
+ left = self .difference (other , sort = False )
3250
+ right = other .difference (self , sort = False )
3251
+ result = left .union (right , sort = sort )
3260
3252
3261
- # {this} minus {other}
3262
- common_indexer = indexer .take ((indexer != - 1 ).nonzero ()[0 ])
3263
- left_indexer = np .setdiff1d (
3264
- np .arange (this .size ), common_indexer , assume_unique = True
3265
- )
3266
- left_diff = this ._values .take (left_indexer )
3267
-
3268
- # {other} minus {this}
3269
- right_indexer = (indexer == - 1 ).nonzero ()[0 ]
3270
- right_diff = other ._values .take (right_indexer )
3271
-
3272
- the_diff = concat_compat ([left_diff , right_diff ])
3273
- the_diff = _maybe_try_sort (the_diff , sort )
3274
-
3275
- return Index (the_diff , name = result_name )
3253
+ if result_name is not None :
3254
+ result = result .rename (result_name )
3255
+ return result
3276
3256
3277
3257
@final
3278
3258
def _assert_can_do_setop (self , other ) -> bool :
0 commit comments