Skip to content

Commit f85c39f

Browse files
committed
BUG: BlockManager.iget fails with non-unique MultiIndex #1970
1 parent 7dd8bc5 commit f85c39f

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

pandas/core/internals.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -833,11 +833,17 @@ def iget(self, i):
833833
return self.get(item)
834834
else:
835835
# ugh
836-
inds, = (self.items == item).nonzero()
836+
try:
837+
inds, = (self.items == item).nonzero()
838+
except AttributeError: #MultiIndex
839+
inds, = self.items.map(lambda x: x == item).nonzero()
837840

838841
_, block = self._find_block(item)
839842

840-
binds, = (block.items == item).nonzero()
843+
try:
844+
binds, = (block.items == item).nonzero()
845+
except AttributeError: #MultiIndex
846+
binds, = block.items.map(lambda x: x == item).nonzero()
841847

842848
for j, (k, b) in enumerate(zip(inds, binds)):
843849
if i == k:

pandas/tests/test_frame.py

+12
Original file line numberDiff line numberDiff line change
@@ -1264,6 +1264,18 @@ def test_irow_icol_duplicates(self):
12641264
assert_almost_equal(result.values, df.values[0])
12651265
assert_series_equal(result, result2)
12661266

1267+
#multiindex
1268+
df = DataFrame(np.random.randn(3, 3), columns=[['i', 'i', 'j'],
1269+
['A', 'A', 'B']],
1270+
index = [['i', 'i', 'j'], ['X', 'X', 'Y']])
1271+
rs = df.irow(0)
1272+
xp = df.ix[0]
1273+
assert_series_equal(rs, xp)
1274+
1275+
rs = df.icol(0)
1276+
xp = df.T.ix[0]
1277+
assert_series_equal(rs, xp)
1278+
12671279
def test_iget_value(self):
12681280
for i, row in enumerate(self.frame.index):
12691281
for j, col in enumerate(self.frame.columns):

0 commit comments

Comments
 (0)