-1

have got a dataframe df like below:

maingroup   subgroup    item    itemrank
Citrus      Mandarin    aa          12
Citrus      Lemon       bb          22
Citrus      Kiwi        cc          32
Citrus      Lemon       dd          35
Citrus      Mandarin    ee          33          
Citrus      Kiwi        ff          42
Citrus      Mandarin    gg          98
Citrus      Mandarin    hh          99

wanna sort the dataframe df with the generated list order 'grp_list'. have tried below logic but not working as expected, instead sorting happens with alphabetical order.

Tried logic:

grp_list = df.sort_values(by=['itemrank'], ascending=True)['subgroup'].unique().tolist()    #['Mandarin', 'Lemon', 'Kiwi']
df['subgroup'] = pd.Categorical(df.subgroup, categories=grp_list, ordered=True)

Errored Output: #this should not happen

maingroup   subgroup    item    itemrank
Citrus      Kiwi        cc      32
Citrus      Kiwi        ff      42
Citrus      Lemon       dd      22
Citrus      Lemon       bb      35
Citrus      Mandarin    ee      12
Citrus      Mandarin    aa      33
Citrus      Mandarin    gg      98
Citrus      Mandarin    hh      99

Expected Output:

maingroup   subgroup    item    itemrank
Citrus      Mandarin    ee      12
Citrus      Mandarin    aa      33
Citrus      Mandarin    gg      98
Citrus      Mandarin    hh      99
Citrus      Lemon       dd      22
Citrus      Lemon       bb      35
Citrus      Kiwi        cc      32
Citrus      Kiwi        ff      42  

Help me solve this! Not sure what's happening. Thanks in Advance.

user12345
  • 499
  • 1
  • 5
  • 21

1 Answers1

0

Last need sorting:

out = df.sort_values(by=['subgroup'])
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252