Skip to content

Commit d9e68be

Browse files
committed
Use safe_sort in Index.intersection
1 parent b85d131 commit d9e68be

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

pandas/core/indexes/base.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -2393,15 +2393,23 @@ def intersection(self, other, sort=True):
23932393
indexer = indexer[indexer != -1]
23942394

23952395
taken = other.take(indexer)
2396-
if self.name != other.name:
2397-
taken.name = None
2396+
23982397
if sort:
23992398
try:
2400-
taken = taken.sort_values()
2399+
taken = sorting.safe_sort(taken.values)
2400+
if self.name != other.name:
2401+
name = None
2402+
else:
2403+
name = self.name
2404+
return self._shallow_copy(taken, name=name)
24012405
except TypeError as e:
24022406
warnings.warn("%s, sort order is undefined for "
24032407
"incomparable objects" % e, RuntimeWarning,
24042408
stacklevel=3)
2409+
2410+
if self.name != other.name:
2411+
taken.name = None
2412+
24052413
return taken
24062414

24072415
def difference(self, other, sort=True):

pandas/tests/indexes/test_base.py

+3-19
Original file line numberDiff line numberDiff line change
@@ -2356,17 +2356,8 @@ def test_intersection_base(self, sort):
23562356
first = index[:5]
23572357
second = index[:3]
23582358

2359-
if PY3 and sort:
2360-
# unorderable types
2361-
warn_type = RuntimeWarning
2362-
expected = Index([0, 'a', 1])
2363-
else:
2364-
warn_type = None
2365-
expected = Index([0, 1, 'a']) if sort else Index([0, 'a', 1])
2366-
2367-
with tm.assert_produces_warning(warn_type):
2368-
result = first.intersection(second, sort=sort)
2369-
2359+
expected = Index([0, 1, 'a']) if sort else Index([0, 'a', 1])
2360+
result = first.intersection(second, sort=sort)
23702361
tm.assert_index_equal(result, expected)
23712362

23722363
@pytest.mark.parametrize("klass", [
@@ -2378,14 +2369,7 @@ def test_intersection_different_type_base(self, klass, sort):
23782369
first = index[:5]
23792370
second = index[:3]
23802371

2381-
if PY3 and sort:
2382-
# unorderable types
2383-
warn_type = RuntimeWarning
2384-
else:
2385-
warn_type = None
2386-
2387-
with tm.assert_produces_warning(warn_type):
2388-
result = first.intersection(klass(second.values), sort=sort)
2372+
result = first.intersection(klass(second.values), sort=sort)
23892373
assert tm.equalContents(result, second)
23902374

23912375
@pytest.mark.parametrize("sort", [True, False])

0 commit comments

Comments
 (0)