Skip to content

Commit 12f148b

Browse files
changhiskhanwesm
authored andcommitted
BUG: xs MultiIndex integer level problem #2107
1 parent 1b23b6f commit 12f148b

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

pandas/core/frame.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2025,6 +2025,11 @@ def xs(self, key, axis=0, level=None, copy=True):
20252025
indexer = tuple(indexer)
20262026
else:
20272027
indexer = loc
2028+
lev_num = labels._get_level_number(level)
2029+
lev = labels.levels[lev_num]
2030+
is_int_type = com.is_integer_dtype(lev)
2031+
if is_int_type:
2032+
indexer = self.index[loc]
20282033

20292034
result = self.ix[indexer]
20302035
setattr(result, result._get_axis_name(axis), new_ax)

pandas/tests/test_multilevel.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,18 @@ def test_xs_level_multiple(self):
359359
expected = df.xs('a').xs(4, level='four')
360360
assert_frame_equal(result, expected)
361361

362+
#GH2107
363+
import itertools
364+
from string import letters
365+
dates = range(20111201, 20111205)
366+
ids = letters[:5]
367+
idx = MultiIndex.from_tuples([x for x in itertools.product(dates, ids)])
368+
idx.names = ['date', 'secid']
369+
df = DataFrame(np.random.randn(len(idx), 3), idx, ['X', 'Y', 'Z'])
370+
rs = df.xs(20111201, level='date')
371+
xp = df.ix[20111201, :]
372+
assert_frame_equal(rs, xp)
373+
362374
def test_xs_level0(self):
363375
from pandas import read_table
364376
from StringIO import StringIO

0 commit comments

Comments
 (0)