Skip to content

Commit 67a4e58

Browse files
committed
Use safe_sort in Index.intersection
1 parent 2edebf1 commit 67a4e58

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
@@ -2254,17 +2254,8 @@ def test_intersection_base(self, sort):
22542254
first = index[:5]
22552255
second = index[:3]
22562256

2257-
if PY3 and sort:
2258-
# unorderable types
2259-
warn_type = RuntimeWarning
2260-
expected = Index([0, 'a', 1])
2261-
else:
2262-
warn_type = None
2263-
expected = Index([0, 1, 'a']) if sort else Index([0, 'a', 1])
2264-
2265-
with tm.assert_produces_warning(warn_type):
2266-
result = first.intersection(second, sort=sort)
2267-
2257+
expected = Index([0, 1, 'a']) if sort else Index([0, 'a', 1])
2258+
result = first.intersection(second, sort=sort)
22682259
tm.assert_index_equal(result, expected)
22692260

22702261
@pytest.mark.parametrize("klass", [
@@ -2276,14 +2267,7 @@ def test_intersection_different_type_base(self, klass, sort):
22762267
first = index[:5]
22772268
second = index[:3]
22782269

2279-
if PY3 and sort:
2280-
# unorderable types
2281-
warn_type = RuntimeWarning
2282-
else:
2283-
warn_type = None
2284-
2285-
with tm.assert_produces_warning(warn_type):
2286-
result = first.intersection(klass(second.values), sort=sort)
2270+
result = first.intersection(klass(second.values), sort=sort)
22872271
assert tm.equalContents(result, second)
22882272

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

0 commit comments

Comments
 (0)