@@ -224,6 +224,31 @@ def test_setitem_list_of_tuples(self):
224
224
expected = Series(tuples, index=self.frame.index)
225
225
assert_series_equal(result, expected)
226
226
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
+
227
252
def test_getitem_boolean(self):
228
253
# boolean indexing
229
254
d = self.tsframe.index[10]
0 commit comments