We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 684e9dd commit b8e7a35Copy full SHA for b8e7a35
RELEASE.rst
@@ -197,6 +197,8 @@ pandas 0.9.0
197
- Set index names in DataFrame.from_records (#1744)
198
- Fix time series indexing error with duplicates, under and over hash table
199
size cutoff (#1821)
200
+ - Handle list keys in addition to tuples in DataFrame.xs when
201
+ partial-indexing a hierarchically-indexed DataFrame (#1796)
202
203
pandas 0.8.1
204
============
pandas/core/index.py
@@ -2081,7 +2081,12 @@ def _drop_levels(indexer, levels):
2081
2082
level = self._get_level_number(level)
2083
2084
+ # kludge for #1796
2085
+ if isinstance(key, list):
2086
+ key = tuple(key)
2087
+
2088
if isinstance(key, tuple) and level == 0:
2089
2090
try:
2091
if key in self.levels[0]:
2092
indexer = self._get_level_indexer(key, level=level)
pandas/tests/test_multilevel.py
@@ -312,6 +312,22 @@ def test_xs_partial(self):
312
assert_frame_equal(result, expected)
313
assert_frame_equal(result, result2)
314
315
+ result = self.ymd.xs((2000, 4))
316
+ expected = self.ymd.ix[2000, 4]
317
+ assert_frame_equal(result, expected)
318
319
+ # ex from #1796
320
+ index = MultiIndex(levels=[['foo', 'bar'], ['one', 'two'], [-1, 1]],
321
+ labels=[[0, 0, 0, 0, 1, 1, 1, 1],
322
+ [0, 0, 1, 1, 0, 0, 1, 1],
323
+ [0, 1, 0, 1, 0, 1, 0, 1]])
324
+ df = DataFrame(np.random.randn(8, 4), index=index,
325
+ columns=list('abcd'))
326
327
+ result = df.xs(['foo', 'one'])
328
+ expected = df.ix['foo', 'one']
329
330
331
def test_xs_level(self):
332
result = self.frame.xs('two', level='second')
333
expected = self.frame[self.frame.index.get_level_values(1) == 'two']
0 commit comments