@@ -1421,50 +1421,57 @@ def test_stack(self, multiindex_year_month_day_dataframe_random_data):
1421
1421
# stack with negative number
1422
1422
result = ymd .unstack (0 ).stack (- 2 )
1423
1423
expected = ymd .unstack (0 ).stack (0 )
1424
+ tm .assert_equal (result , expected )
1424
1425
1426
+ @pytest .mark .parametrize (
1427
+ "idx, columns, exp_idx" ,
1428
+ [
1429
+ [
1430
+ list ("abab" ),
1431
+ ["1st" , "2nd" , "3rd" ],
1432
+ MultiIndex (
1433
+ levels = [["a" , "b" ], ["1st" , "2nd" , "3rd" ]],
1434
+ codes = [
1435
+ np .tile (np .arange (2 ).repeat (3 ), 2 ),
1436
+ np .tile (np .arange (3 ), 4 ),
1437
+ ],
1438
+ ),
1439
+ ],
1440
+ [
1441
+ list ("abab" ),
1442
+ ["1st" , "2nd" , "1st" ],
1443
+ MultiIndex (
1444
+ levels = [["a" , "b" ], ["1st" , "2nd" ]],
1445
+ codes = [np .tile (np .arange (2 ).repeat (3 ), 2 ), np .tile ([0 , 1 , 0 ], 4 )],
1446
+ ),
1447
+ ],
1448
+ [
1449
+ MultiIndex .from_tuples ((("a" , 2 ), ("b" , 1 ), ("a" , 1 ), ("b" , 2 ))),
1450
+ ["1st" , "2nd" , "1st" ],
1451
+ MultiIndex (
1452
+ levels = [["a" , "b" ], [1 , 2 ], ["1st" , "2nd" ]],
1453
+ codes = [
1454
+ np .tile (np .arange (2 ).repeat (3 ), 2 ),
1455
+ np .repeat ([1 , 0 , 1 ], [3 , 6 , 3 ]),
1456
+ np .tile ([0 , 1 , 0 ], 4 ),
1457
+ ],
1458
+ ),
1459
+ ],
1460
+ ],
1461
+ )
1462
+ def test_stack_duplicate_index (self , idx , columns , exp_idx ):
1425
1463
# GH10417
1426
- def check (left , right ):
1427
- tm .assert_series_equal (left , right )
1428
- assert left .index .is_unique is False
1429
- li , ri = left .index , right .index
1430
- tm .assert_index_equal (li , ri )
1431
-
1432
1464
df = DataFrame (
1433
1465
np .arange (12 ).reshape (4 , 3 ),
1434
- index = list ( "abab" ) ,
1435
- columns = [ "1st" , "2nd" , "3rd" ] ,
1466
+ index = idx ,
1467
+ columns = columns ,
1436
1468
)
1437
-
1438
- mi = MultiIndex (
1439
- levels = [["a" , "b" ], ["1st" , "2nd" , "3rd" ]],
1440
- codes = [np .tile (np .arange (2 ).repeat (3 ), 2 ), np .tile (np .arange (3 ), 4 )],
1441
- )
1442
-
1443
- left , right = df .stack (), Series (np .arange (12 ), index = mi )
1444
- check (left , right )
1445
-
1446
- df .columns = ["1st" , "2nd" , "1st" ]
1447
- mi = MultiIndex (
1448
- levels = [["a" , "b" ], ["1st" , "2nd" ]],
1449
- codes = [np .tile (np .arange (2 ).repeat (3 ), 2 ), np .tile ([0 , 1 , 0 ], 4 )],
1450
- )
1451
-
1452
- left , right = df .stack (), Series (np .arange (12 ), index = mi )
1453
- check (left , right )
1454
-
1455
- tpls = ("a" , 2 ), ("b" , 1 ), ("a" , 1 ), ("b" , 2 )
1456
- df .index = MultiIndex .from_tuples (tpls )
1457
- mi = MultiIndex (
1458
- levels = [["a" , "b" ], [1 , 2 ], ["1st" , "2nd" ]],
1459
- codes = [
1460
- np .tile (np .arange (2 ).repeat (3 ), 2 ),
1461
- np .repeat ([1 , 0 , 1 ], [3 , 6 , 3 ]),
1462
- np .tile ([0 , 1 , 0 ], 4 ),
1463
- ],
1464
- )
1465
-
1466
- left , right = df .stack (), Series (np .arange (12 ), index = mi )
1467
- check (left , right )
1469
+ result = df .stack ()
1470
+ expected = Series (np .arange (12 ), index = exp_idx )
1471
+ tm .assert_series_equal (result , expected )
1472
+ assert result .index .is_unique is False
1473
+ li , ri = result .index , expected .index
1474
+ tm .assert_index_equal (li , ri )
1468
1475
1469
1476
def test_unstack_odd_failure (self ):
1470
1477
data = """day,time,smoker,sum,len
0 commit comments