@@ -1392,3 +1392,48 @@ def test_read_only_category_no_sort():
1392
1392
expected = DataFrame (data = {"a" : [2 , 6 ]}, index = CategoricalIndex ([1 , 2 ], name = "b" ))
1393
1393
result = df .groupby ("b" , sort = False ).mean ()
1394
1394
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