cwerwf
cwerwf

Reputation: 13

Ranking columns by a single integer

Hi i am basically trying to rank a column in a dataframe into ranking position.

it looks something like this i am trying to create something like this. For person with same number of fruits sold to have the same ranking So that when i sort them by rankings it does not have any decimals. Can anyone advice me?

person | number of fruits sold | ranking
 A     |          5            |    2
 B     |          6            |    1
 C     |          2            |    4
 D     |          5            |    2
 E     |          3            |    3

Upvotes: 1

Views: 1432

Answers (2)

jezrael
jezrael

Reputation: 863166

Use Series.rank:

df['ranking'] = df['number of fruits sold'].rank(method='dense', ascending=False).astype(int)
print (df)
  person  number of fruits sold  ranking
0      A                      5        2
1      B                      6        1
2      C                      2        4
3      D                      5        2
4      E                      3        3

Upvotes: 1

jpp
jpp

Reputation: 164773

You can use pd.factorize. A few tricks here: take care to negate your series, specify sort=True, add 1 for your desired result.

df['ranking'] = pd.factorize(-df['number of fruits sold'], sort=True)[0] + 1

Result:

    person  number of fruits sold  ranking
0   A                           5        2
1   B                           6        1
2   C                           2        4
3   D                           5        2
4   E                           3        3

Upvotes: 1

Related Questions