@@ -1656,6 +1656,41 @@ def test_categorical_margins_category(self, observed):
1656
1656
table = df .pivot_table ("x" , "y" , "z" , dropna = observed , margins = True )
1657
1657
tm .assert_frame_equal (table , expected )
1658
1658
1659
+ def test_pivot_with_categorical (self , observed ):
1660
+ # gh-21370
1661
+ idx = [np .nan , "low" , "high" , "low" , np .nan ]
1662
+ col = [np .nan , "A" , "B" , np .nan , "A" ]
1663
+ df = pd .DataFrame (
1664
+ {
1665
+ "In" : pd .Categorical (idx , categories = ["low" , "high" ], ordered = True ),
1666
+ "Col" : pd .Categorical (col , categories = ["A" , "B" ], ordered = True ),
1667
+ "Val" : range (1 , 6 ),
1668
+ }
1669
+ )
1670
+ # case with index/columns/value
1671
+ result = df .pivot_table (index = "In" , columns = "Col" , values = "Val" )
1672
+
1673
+ expected_cols = pd .CategoricalIndex (["A" , "B" ], ordered = True , name = "Col" )
1674
+
1675
+ expected = pd .DataFrame (
1676
+ data = [[2.0 , np .nan ], [np .nan , 3.0 ]], columns = expected_cols
1677
+ )
1678
+ expected .index = Index (
1679
+ pd .Categorical (["low" , "high" ], categories = ["low" , "high" ], ordered = True ),
1680
+ name = "In" ,
1681
+ )
1682
+
1683
+ tm .assert_frame_equal (result , expected )
1684
+
1685
+ # case with columns/value
1686
+ result = df .pivot_table (columns = "Col" , values = "Val" )
1687
+
1688
+ expected = pd .DataFrame (
1689
+ data = [[3.5 , 3.0 ]], columns = expected_cols , index = Index (["Val" ])
1690
+ )
1691
+
1692
+ tm .assert_frame_equal (result , expected )
1693
+
1659
1694
def test_categorical_aggfunc (self , observed ):
1660
1695
# GH 9534
1661
1696
df = pd .DataFrame (
@@ -2554,38 +2589,3 @@ def test_margin_normalize(self):
2554
2589
names = ["A" , "B" ],
2555
2590
)
2556
2591
tm .assert_frame_equal (result , expected )
2557
-
2558
- def test_pivot_with_categorical (self ):
2559
- # gh-21370
2560
- idx = [np .nan , "low" , "high" , "low" , np .nan ]
2561
- col = [np .nan , "A" , "B" , np .nan , "A" ]
2562
- df = pd .DataFrame (
2563
- {
2564
- "In" : pd .Categorical (idx , categories = ["low" , "high" ], ordered = True ),
2565
- "Col" : pd .Categorical (col , categories = ["A" , "B" ], ordered = True ),
2566
- "Val" : range (1 , 6 ),
2567
- }
2568
- )
2569
- # case with index/columns/value
2570
- result = df .pivot_table (index = "In" , columns = "Col" , values = "Val" )
2571
-
2572
- expected_cols = pd .CategoricalIndex (["A" , "B" ], ordered = True , name = "Col" )
2573
-
2574
- expected = pd .DataFrame (
2575
- data = [[2.0 , np .nan ], [np .nan , 3.0 ]], columns = expected_cols
2576
- )
2577
- expected .index = Index (
2578
- pd .Categorical (["low" , "high" ], categories = ["low" , "high" ], ordered = True ),
2579
- name = "In" ,
2580
- )
2581
-
2582
- tm .assert_frame_equal (result , expected )
2583
-
2584
- # case with columns/value
2585
- result = df .pivot_table (columns = "Col" , values = "Val" )
2586
-
2587
- expected = pd .DataFrame (
2588
- data = [[3.5 , 3.0 ]], columns = expected_cols , index = Index (["Val" ])
2589
- )
2590
-
2591
- tm .assert_frame_equal (result , expected )
0 commit comments