@@ -2183,7 +2183,7 @@ def _get_consensus_name(self, other):
2183
2183
return self ._shallow_copy (name = name )
2184
2184
return self
2185
2185
2186
- def union (self , other ):
2186
+ def union (self , other , sort = True ):
2187
2187
"""
2188
2188
Form the union of two Index objects and sorts if possible.
2189
2189
@@ -2241,27 +2241,29 @@ def union(self, other):
2241
2241
allow_fill = False )
2242
2242
result = _concat ._concat_compat ((self ._values , other_diff ))
2243
2243
2244
- try :
2245
- self ._values [0 ] < other_diff [0 ]
2246
- except TypeError as e :
2247
- warnings .warn ("%s, sort order is undefined for "
2248
- "incomparable objects" % e , RuntimeWarning ,
2249
- stacklevel = 3 )
2250
- else :
2251
- types = frozenset ((self .inferred_type ,
2252
- other .inferred_type ))
2253
- if not types & _unsortable_types :
2254
- result .sort ()
2244
+ if sort :
2245
+ try :
2246
+ self ._values [0 ] < other_diff [0 ]
2247
+ except TypeError as e :
2248
+ warnings .warn ("%s, sort order is undefined for "
2249
+ "incomparable objects" % e , RuntimeWarning ,
2250
+ stacklevel = 3 )
2251
+ else :
2252
+ types = frozenset ((self .inferred_type ,
2253
+ other .inferred_type ))
2254
+ if not types & _unsortable_types :
2255
+ result .sort ()
2255
2256
2256
2257
else :
2257
2258
result = self ._values
2258
2259
2259
- try :
2260
- result = np .sort (result )
2261
- except TypeError as e :
2262
- warnings .warn ("%s, sort order is undefined for "
2263
- "incomparable objects" % e , RuntimeWarning ,
2264
- stacklevel = 3 )
2260
+ if sort :
2261
+ try :
2262
+ result = np .sort (result )
2263
+ except TypeError as e :
2264
+ warnings .warn ("%s, sort order is undefined for "
2265
+ "incomparable objects" % e , RuntimeWarning ,
2266
+ stacklevel = 3 )
2265
2267
2266
2268
# for subclasses
2267
2269
return self ._wrap_union_result (other , result )
@@ -2326,7 +2328,7 @@ def intersection(self, other):
2326
2328
taken .name = None
2327
2329
return taken
2328
2330
2329
- def difference (self , other ):
2331
+ def difference (self , other , sort = True ):
2330
2332
"""
2331
2333
Return a new Index with elements from the index that are not in
2332
2334
`other`.
@@ -2366,14 +2368,15 @@ def difference(self, other):
2366
2368
label_diff = np .setdiff1d (np .arange (this .size ), indexer ,
2367
2369
assume_unique = True )
2368
2370
the_diff = this .values .take (label_diff )
2369
- try :
2370
- the_diff = sorting .safe_sort (the_diff )
2371
- except TypeError :
2372
- pass
2371
+ if sort :
2372
+ try :
2373
+ the_diff = sorting .safe_sort (the_diff )
2374
+ except TypeError :
2375
+ pass
2373
2376
2374
2377
return this ._shallow_copy (the_diff , name = result_name , freq = None )
2375
2378
2376
- def symmetric_difference (self , other , result_name = None ):
2379
+ def symmetric_difference (self , other , result_name = None , sort = True ):
2377
2380
"""
2378
2381
Compute the symmetric difference of two Index objects.
2379
2382
It's sorted if sorting is possible.
@@ -2426,10 +2429,11 @@ def symmetric_difference(self, other, result_name=None):
2426
2429
right_diff = other .values .take (right_indexer )
2427
2430
2428
2431
the_diff = _concat ._concat_compat ([left_diff , right_diff ])
2429
- try :
2430
- the_diff = sorting .safe_sort (the_diff )
2431
- except TypeError :
2432
- pass
2432
+ if sort :
2433
+ try :
2434
+ the_diff = sorting .safe_sort (the_diff )
2435
+ except TypeError :
2436
+ pass
2433
2437
2434
2438
attribs = self ._get_attributes_dict ()
2435
2439
attribs ['name' ] = result_name
@@ -4220,3 +4224,4 @@ def _trim_front(strings):
4220
4224
def _validate_join_method (method ):
4221
4225
if method not in ['left' , 'right' , 'inner' , 'outer' ]:
4222
4226
raise ValueError ('do not recognize join method %s' % method )
4227
+
0 commit comments