@@ -282,6 +282,46 @@ def test_unstack_fill_frame_categorical(self):
282
282
index = list ('xyz' ))
283
283
assert_frame_equal (result , expected )
284
284
285
+ def test_unstack_preserve_dtypes (self ):
286
+ # Checks fix for #11847
287
+ df = pd .DataFrame (dict (state = ['IL' , 'MI' , 'NC' ],
288
+ index = ['a' , 'b' , 'c' ],
289
+ A = np .random .rand (3 ),
290
+ B = 1 ,
291
+ C = 'foo' ,
292
+ D = pd .Timestamp ('20010102' ),
293
+ E = pd .Series ([1.0 , 50.0 , 100.0 ]
294
+ ).astype ('float32' ),
295
+ F = pd .Series ([3.0 , 4.0 , 5.0 ]).astype ('float64' ),
296
+ G = False ,
297
+ H = pd .Series ([1 , 200 , 923442 ], dtype = 'int8' )))
298
+
299
+ df1 = df .set_index (['state' , 'index' ])
300
+ unstacked1 = df1 .unstack (['index' ])
301
+ unstacked2 = df1 .unstack ('index' )
302
+ assert_frame_equal (unstacked1 , unstacked2 )
303
+
304
+ df1 = df .set_index (['F' , 'C' ])
305
+ unstacked1 = df1 .unstack (['F' ])
306
+ unstacked2 = df1 .unstack ('F' )
307
+ assert_frame_equal (unstacked1 , unstacked2 )
308
+
309
+ df1 = df .set_index (['G' , 'B' , 'state' ])
310
+ unstacked1 = df1 .unstack (['B' ])
311
+ unstacked2 = df1 .unstack ('B' )
312
+ assert_frame_equal (unstacked1 , unstacked2 )
313
+
314
+ df1 = df .set_index (['E' , 'A' ])
315
+ unstacked1 = df1 .unstack (['E' ])
316
+ unstacked2 = df1 .unstack ('E' )
317
+ assert_frame_equal (unstacked1 , unstacked2 )
318
+
319
+ df1 = df .set_index (['state' , 'index' ])
320
+ s = df1 ['A' ]
321
+ unstacked1 = s .unstack (['index' ])
322
+ unstacked2 = s .unstack ('index' )
323
+ assert_frame_equal (unstacked1 , unstacked2 )
324
+
285
325
def test_stack_ints (self ):
286
326
columns = MultiIndex .from_tuples (list (itertools .product (range (3 ),
287
327
repeat = 3 )))
0 commit comments