@@ -358,6 +358,49 @@ def test_unstack(self):
358
358
# test that int32 work
359
359
self .ymd .astype (np .int32 ).unstack ()
360
360
361
+ @pytest .mark .parametrize (
362
+ "result_rows,result_columns,index_product,expected_row" ,
363
+ [
364
+ (
365
+ [[1 , 1 , None , None , 30.0 , None ], [2 , 2 , None , None , 30.0 , None ]],
366
+ [u"ix1" , u"ix2" , u"col1" , u"col2" , u"col3" , u"col4" ],
367
+ 2 ,
368
+ [None , None , 30.0 , None ],
369
+ ),
370
+ (
371
+ [[1 , 1 , None , None , 30.0 ], [2 , 2 , None , None , 30.0 ]],
372
+ [u"ix1" , u"ix2" , u"col1" , u"col2" , u"col3" ],
373
+ 2 ,
374
+ [None , None , 30.0 ],
375
+ ),
376
+ (
377
+ [[1 , 1 , None , None , 30.0 ], [2 , None , None , None , 30.0 ]],
378
+ [u"ix1" , u"ix2" , u"col1" , u"col2" , u"col3" ],
379
+ None ,
380
+ [None , None , 30.0 ],
381
+ ),
382
+ ],
383
+ )
384
+ def test_unstack_partial (
385
+ self , result_rows , result_columns , index_product , expected_row
386
+ ):
387
+ # check for regressions on this issue:
388
+ # https://github.com/pandas-dev/pandas/issues/19351
389
+ # make sure DataFrame.unstack() works when its run on a subset of the DataFrame
390
+ # and the Index levels contain values that are not present in the subset
391
+ result = pd .DataFrame (result_rows , columns = result_columns ).set_index (
392
+ [u"ix1" , "ix2" ]
393
+ )
394
+ result = result .iloc [1 :2 ].unstack ("ix2" )
395
+ expected = pd .DataFrame (
396
+ [expected_row ],
397
+ columns = pd .MultiIndex .from_product (
398
+ [result_columns [2 :], [index_product ]], names = [None , "ix2" ]
399
+ ),
400
+ index = pd .Index ([2 ], name = "ix1" ),
401
+ )
402
+ tm .assert_frame_equal (result , expected )
403
+
361
404
def test_unstack_multiple_no_empty_columns (self ):
362
405
index = MultiIndex .from_tuples (
363
406
[(0 , "foo" , 0 ), (0 , "bar" , 0 ), (1 , "baz" , 1 ), (1 , "qux" , 1 )]
0 commit comments