@@ -224,6 +224,31 @@ def test_setitem_list_of_tuples(self):
224224 expected = Series(tuples, index=self.frame.index)
225225 assert_series_equal(result, expected)
226226
227+ def test_setitem_mulit_index(self):
228+ # GH7655, test that assigning to a sub-frame of a frame
229+ # with multi-index columns aligns both rows and columns
230+ it = ['jim', 'joe', 'jolie'], ['first', 'last'], \
231+ ['left', 'center', 'right']
232+
233+ cols = MultiIndex.from_product(it)
234+ index = pd.date_range('20141006',periods=20)
235+ vals = np.random.randint(1, 1000, (len(index), len(cols)))
236+ df = pd.DataFrame(vals, columns=cols, index=index)
237+
238+ i, j = df.index.values.copy(), it[-1][:]
239+
240+ np.random.shuffle(i)
241+ df['jim'] = df['jolie'].loc[i, ::-1]
242+ assert_frame_equal(df['jim'], df['jolie'])
243+
244+ np.random.shuffle(j)
245+ df[('joe', 'first')] = df[('jolie', 'last')].loc[i, j]
246+ assert_frame_equal(df[('joe', 'first')], df[('jolie', 'last')])
247+
248+ np.random.shuffle(j)
249+ df[('joe', 'last')] = df[('jolie', 'first')].loc[i, j]
250+ assert_frame_equal(df[('joe', 'last')], df[('jolie', 'first')])
251+
227252 def test_getitem_boolean(self):
228253 # boolean indexing
229254 d = self.tsframe.index[10]
0 commit comments