>>> df["rank"] = df.groupby("group_ID")["value"].rank("dense", ascending=False) >>> df group_ID item_ID value rank 0 0S00A1HZEy AB 10 2 1 0S00A1HZEy AY 4 3 2 0S00A1HZEy AC 35 1 3 0S03jpFRaS AY 90 1 4 0S03jpFRaS A5 3 5 5 0S03jpFRaS A3 10 2 6 0S03jpFRaS A2 8 4 7 0S03jpFRaS A4 9 3 8 0S03jpFRaS A6 2 6 9 0S03jpFRaS AX 0 7