Skip to content

Commit 57327e2

Browse files
committed
Merge pull request #3378 from cpcloud/multiindex-bug
multiindex xs slicing bug fix - thanks!
2 parents b3472d4 + 205bd59 commit 57327e2

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

pandas/core/frame.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2226,8 +2226,9 @@ def xs(self, key, axis=0, level=None, copy=True):
22262226
raise ValueError('Cannot retrieve view (copy=False)')
22272227

22282228
# level = 0
2229-
if not isinstance(loc, slice):
2230-
indexer = [slice(None, None)] * 2
2229+
loc_is_slice = isinstance(loc, slice)
2230+
if not loc_is_slice:
2231+
indexer = [slice(None)] * 2
22312232
indexer[axis] = loc
22322233
indexer = tuple(indexer)
22332234
else:
@@ -2237,10 +2238,9 @@ def xs(self, key, axis=0, level=None, copy=True):
22372238
indexer = self.index[loc]
22382239

22392240
# select on the correct axis
2240-
if axis == 1:
2241-
result = self.ix[:, indexer]
2242-
else:
2243-
result = self.ix[indexer]
2241+
if axis == 1 and loc_is_slice:
2242+
indexer = slice(None), indexer
2243+
result = self.ix[indexer]
22442244
setattr(result, result._get_axis_name(axis), new_ax)
22452245
return result
22462246

pandas/tests/test_indexing.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,11 @@ def test_xs_multiindex(self):
724724
expected = df.iloc[:,0:2].loc[:,'a']
725725
assert_frame_equal(result,expected)
726726

727+
result = df.xs('foo', level='lvl1', axis=1)
728+
expected = df.iloc[:, 1:2].copy()
729+
expected.columns = expected.columns.droplevel('lvl1')
730+
assert_frame_equal(result, expected)
731+
727732
def test_setitem_dtype_upcast(self):
728733

729734
# GH3216

0 commit comments

Comments
 (0)