@@ -2422,7 +2422,6 @@ def get_groups_and_orders(args, grouper):
24222422 # figure out orders and what the single group name would be if there were one
24232423 single_group_name = []
24242424 unique_cache = dict ()
2425- grp_to_idx = dict ()
24262425
24272426 for i , col in enumerate (grouper ):
24282427 if col == one_group :
@@ -2440,27 +2439,28 @@ def get_groups_and_orders(args, grouper):
24402439 else :
24412440 orders [col ] = list (OrderedDict .fromkeys (list (orders [col ]) + uniques ))
24422441
2443- grp_to_idx = {k : i for i , k in enumerate (orders )}
2444-
24452442 if len (single_group_name ) == len (grouper ):
24462443 # we have a single group, so we can skip all group-by operations!
24472444 groups = {tuple (single_group_name ): df }
24482445 else :
2449- required_grouper = list ( orders . keys ())
2446+ required_grouper = [ group for group in orders if group in grouper ]
24502447 grouped = dict (df .group_by (required_grouper , drop_null_keys = True ).__iter__ ())
2451- sorted_group_names = list (grouped .keys ())
24522448
2453- for i , col in reversed (list (enumerate (required_grouper ))):
2454- sorted_group_names = sorted (
2455- sorted_group_names ,
2456- key = lambda g : orders [col ].index (g [i ]) if g [i ] in orders [col ] else - 1 ,
2457- )
2449+ sorted_group_names = sorted (
2450+ grouped .keys (),
2451+ key = lambda values : [
2452+ orders [group ].index (value ) if value in orders [group ] else - 1
2453+ for group , value in zip (required_grouper , values )
2454+ ],
2455+ )
24582456
24592457 # calculate the full group_names by inserting "" in the tuple index for one_group groups
24602458 full_sorted_group_names = [
24612459 tuple (
24622460 [
2463- "" if col == one_group else sub_group_names [grp_to_idx [col ]]
2461+ ""
2462+ if col == one_group
2463+ else sub_group_names [required_grouper .index (col )]
24642464 for col in grouper
24652465 ]
24662466 )
0 commit comments