Skip to content

Commit 0f5dd3d

Browse files
committed
BUG: hierarchical indexing bug if more than 2 levels and top is empty #2596
1 parent e963988 commit 0f5dd3d

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

pandas/core/frame.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -1999,9 +1999,12 @@ def _getitem_multilevel(self, key):
19991999
columns=result_columns)
20002000
if len(result.columns) == 1:
20012001
top = result.columns[0]
2002-
if (type(top) == str and top == '' or
2003-
type(top) == tuple and top[0] == ''):
2004-
result = Series(result[''], index=self.index, name=key)
2002+
if ((type(top) == str and top == '') or
2003+
(type(top) == tuple and top[0] == '')):
2004+
result = result['']
2005+
if isinstance(result, Series):
2006+
result = Series(result, index=self.index, name=key)
2007+
20052008
return result
20062009
else:
20072010
return self._get_item_cache(key)

pandas/tests/test_multilevel.py

+12
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,18 @@ def test_frame_getitem_setitem_multislice(self):
278278
df.ix[:,:] = 10
279279
assert_frame_equal(df, result)
280280

281+
def test_frame_getitem_multicolumn_empty_level(self):
282+
f = DataFrame({'a': ['1','2','3'],
283+
'b': ['2','3','4']})
284+
f.columns = [['level1 item1', 'level1 item2'],
285+
['', 'level2 item2'],
286+
['level3 item1', 'level3 item2']]
287+
288+
result = f['level1 item1']
289+
expected = DataFrame([['1'],['2'],['3']], index=f.index,
290+
columns=['level3 item1'])
291+
assert_frame_equal(result, expected)
292+
281293
def test_frame_setitem_multi_column(self):
282294
df = DataFrame(randn(10, 4), columns=[['a', 'a', 'b', 'b'],
283295
[0, 1, 0, 1]])

0 commit comments

Comments
 (0)