diff --git a/pandas/core/internals.py b/pandas/core/internals.py index ed8cfb59bc995..a548b5f61754e 100644 --- a/pandas/core/internals.py +++ b/pandas/core/internals.py @@ -674,7 +674,8 @@ def setitem(self, indexer, value): values = self._try_coerce_result(values) values = self._try_cast_result(values, dtype) return [make_block(transf(values), self.items, self.ref_items, - ndim=self.ndim, fastpath=True)] + ndim=self.ndim, placement=self._ref_locs, + fastpath=True)] except (ValueError, TypeError) as detail: raise except Exception as detail: @@ -2902,7 +2903,10 @@ def fast_xs(self, loc, copy=False): # non-unique (GH4726) if not items.is_unique: - return self._interleave(items).ravel(), True + result = self._interleave(items) + if self.ndim == 2: + result = result.T + return result[loc], True # unique dtype = _interleaved_dtype(self.blocks) diff --git a/pandas/tests/test_indexing.py b/pandas/tests/test_indexing.py index fe08fb3a957c2..ea1e07dbf6acc 100644 --- a/pandas/tests/test_indexing.py +++ b/pandas/tests/test_indexing.py @@ -483,6 +483,19 @@ def test_iloc_getitem_dups(self): # no dups in panel (bug?) self.check_result('list int (dups)', 'iloc', [0,1,1,3], 'ix', { 0 : [0,2,2,6], 1 : [0,3,3,9] }, objs = ['series','frame'], typs = ['ints']) + # GH 6766 + df1 = DataFrame([{'A':None, 'B':1},{'A':2, 'B':2}]) + df2 = DataFrame([{'A':3, 'B':3},{'A':4, 'B':4}]) + df = concat([df1, df2], axis=1) + + # cross-sectional indexing + result = df.iloc[0,0] + self.assertTrue(isnull(result)) + + result = df.iloc[0,:] + expected = Series([np.nan,1,3,3],index=['A','B','A','B']) + assert_series_equal(result,expected) + def test_iloc_getitem_array(self): # array like