@@ -1392,3 +1392,48 @@ def test_read_only_category_no_sort():
13921392 expected = DataFrame (data = {"a" : [2 , 6 ]}, index = CategoricalIndex ([1 , 2 ], name = "b" ))
13931393 result = df .groupby ("b" , sort = False ).mean ()
13941394 tm .assert_frame_equal (result , expected )
1395+
1396+
1397+ def test_sorted_missing_category_values ():
1398+ # GH 28597
1399+ df = pd .DataFrame (
1400+ {
1401+ "foo" : [
1402+ "small" ,
1403+ "large" ,
1404+ "large" ,
1405+ "large" ,
1406+ "medium" ,
1407+ "large" ,
1408+ "large" ,
1409+ "medium" ,
1410+ ],
1411+ "bar" : ["C" , "A" , "A" , "C" , "A" , "C" , "A" , "C" ],
1412+ }
1413+ )
1414+ df ["foo" ] = (
1415+ df ["foo" ]
1416+ .astype ("category" )
1417+ .cat .set_categories (["tiny" , "small" , "medium" , "large" ], ordered = True )
1418+ )
1419+
1420+ expected = pd .DataFrame (
1421+ {
1422+ "tiny" : {"A" : 0 , "C" : 0 },
1423+ "small" : {"A" : 0 , "C" : 1 },
1424+ "medium" : {"A" : 1 , "C" : 1 },
1425+ "large" : {"A" : 3 , "C" : 2 },
1426+ }
1427+ )
1428+ expected = expected .rename_axis ("bar" , axis = "index" )
1429+ expected .columns = pd .CategoricalIndex (
1430+ ["tiny" , "small" , "medium" , "large" ],
1431+ categories = ["tiny" , "small" , "medium" , "large" ],
1432+ ordered = True ,
1433+ name = "foo" ,
1434+ dtype = "category" ,
1435+ )
1436+
1437+ result = df .groupby (["bar" , "foo" ]).size ().unstack ()
1438+
1439+ tm .assert_frame_equal (result , expected )
0 commit comments