diff --git a/doc/source/release.rst b/doc/source/release.rst index 795c3cd642a80..8586f2093b9d2 100644 --- a/doc/source/release.rst +++ b/doc/source/release.rst @@ -533,6 +533,7 @@ Bug Fixes - Bug in ``query``/``eval`` where global constants were not looked up correctly (:issue:`7178`) - Bug in recognizing out-of-bounds positional list indexers with ``iloc`` and a multi-axis tuple indexer (:issue:`7189`) +- Bug in setitem with a single value, multi-index and integer indices (:issue:`7190`) pandas 0.13.1 ------------- diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 5359a045451c3..cf8ad0f48a939 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -333,11 +333,7 @@ def _setitem_with_indexer(self, indexer, value): obj = self.obj[item] index = obj.index idx = indexer[:info_axis][0] - try: - if idx in index: - idx = index.get_loc(idx) - except: - pass + plane_indexer = tuple([idx]) + indexer[info_axis + 1:] lplane_indexer = _length_of_indexer(plane_indexer[0], index) diff --git a/pandas/tests/test_indexing.py b/pandas/tests/test_indexing.py index db27f9be867c6..a2550810ef13d 100644 --- a/pandas/tests/test_indexing.py +++ b/pandas/tests/test_indexing.py @@ -607,6 +607,17 @@ def test_loc_setitem(self): expected = DataFrame({'a' : [0.5,-0.5,-1.5], 'b' : [0,1,2] }) assert_frame_equal(df,expected) + def test_loc_setitem_multiindex(self): + + # GH7190 + index = pd.MultiIndex.from_product([np.arange(0,100), np.arange(0, 80)], names=['time', 'firm']) + df = DataFrame(np.nan,columns=['A', 'w', 'l', 'a', 'x', 'X', 'd', 'profit'], index=index) + t, n = 0, 2 + + df.loc[(t,n),'X'] = 0 + result = df.loc[(t,n),'X'] + self.assertEqual(result, 0) + def test_loc_setitem_dups(self): # GH 6541