From 7d49346e108be9c29d3abaaade3580697cba5fa7 Mon Sep 17 00:00:00 2001 From: Ka Wo Chen Date: Sun, 8 May 2016 14:19:40 -0400 Subject: [PATCH] BUG: GH12896 where extra elements are returned in MultiIndex slicing --- doc/source/whatsnew/v0.18.2.txt | 2 +- pandas/indexes/multi.py | 3 ++- pandas/tests/indexing/test_indexing.py | 12 ++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/source/whatsnew/v0.18.2.txt b/doc/source/whatsnew/v0.18.2.txt index b86a7a81625e2..d1eb17ea9860f 100644 --- a/doc/source/whatsnew/v0.18.2.txt +++ b/doc/source/whatsnew/v0.18.2.txt @@ -134,7 +134,7 @@ Bug Fixes - +- Bug in ``MultiIndex`` slicing where extra elements were returned when level is non-unique (:issue:`12896`) diff --git a/pandas/indexes/multi.py b/pandas/indexes/multi.py index db2f80ae78446..6f3360cdf82a7 100644 --- a/pandas/indexes/multi.py +++ b/pandas/indexes/multi.py @@ -1761,7 +1761,8 @@ def convert_indexer(start, stop, step, indexer=indexer, labels=labels): else: m = np.zeros(len(labels), dtype=bool) - m[np.in1d(labels, r, assume_unique=True)] = True + m[np.in1d(labels, r, + assume_unique=Index(labels).is_unique)] = True return m diff --git a/pandas/tests/indexing/test_indexing.py b/pandas/tests/indexing/test_indexing.py index 4b8b5ae2571d0..fdc9d3599e8ac 100644 --- a/pandas/tests/indexing/test_indexing.py +++ b/pandas/tests/indexing/test_indexing.py @@ -2334,6 +2334,18 @@ def test_multiindex_slicers_non_unique(self): self.assertFalse(result.index.is_unique) assert_frame_equal(result, expected) + # GH12896 + # numpy-implementation dependent bug + ints = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 16, + 17, 18, 19, 200000, 200000] + n = len(ints) + idx = MultiIndex.from_arrays([['a'] * n, ints]) + result = Series([1] * n, index=idx) + result = result.sort_index() + result = result.loc[(slice(None), slice(100000))] + expected = Series([1] * (n - 2), index=idx[:-2]).sort_index() + assert_series_equal(result, expected) + def test_multiindex_slicers_datetimelike(self): # GH 7429