diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 81d892fba0fe2..f4a5dfa3fd29a 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -2097,7 +2097,9 @@ def _maybe_to_slice(loc): mask[loc] = True return mask - if not isinstance(key, tuple): + if isinstance(key, slice): + return key + elif not isinstance(key, tuple): loc = self._get_level_indexer(key, level=0) return _maybe_to_slice(loc) diff --git a/pandas/tests/indexing/test_multiindex.py b/pandas/tests/indexing/test_multiindex.py index d89c64fc5b9f8..014573cdf621d 100644 --- a/pandas/tests/indexing/test_multiindex.py +++ b/pandas/tests/indexing/test_multiindex.py @@ -239,6 +239,15 @@ def test_iloc_getitem_multiindex(self): xp = mi_labels.ix['j'].ix[:, 'j'].ix[0, 0] assert rs == xp + # GH8856 + s = pd.Series(np.arange(10), + pd.MultiIndex.from_product(([0, 1], list('abcde')))) + result = s.iloc[::4] + expected = pd.Series(np.array([0, 4, 8]), + MultiIndex(levels=[[0, 1], list('ade')], + labels=[[0, 0, 1], [0, 2, 1]])) + tm.assert_series_equal(result, expected) + def test_loc_multiindex(self): mi_labels = DataFrame(np.random.randn(3, 3), @@ -278,6 +287,15 @@ def test_loc_multiindex(self): xp = mi_int.ix[4] tm.assert_frame_equal(rs, xp) + # GH8856 + s = pd.Series(np.arange(10), + pd.MultiIndex.from_product(([0, 1], list('abcde')))) + result = s.loc[::4] + expected = pd.Series(np.array([0, 4, 8]), + MultiIndex(levels=[[0, 1], ['a', 'd', 'e']], + labels=[[0, 0, 1], [0, 2, 1]])) + tm.assert_series_equal(result, expected) + def test_getitem_partial_int(self): # GH 12416 # with single item