J'ai un dataframe

df = 
type value
 A     5
 A     7
 B     2
 B     6
 A     1

Je devais appliquer la fonction par les groupes de la colonne type, donc le rang s'appliquera par type et le nouveau df sera

df = 
type value rank
 A     5    1
 A     7    0
 B     2    1
 B     6    0
 A     1    2
4
okuoub 10 avril 2020 à 18:07

2 réponses

Meilleure réponse

Vous pouvez utiliser { {X0}}, paramètre ascending=False:

df['rank'] = df.groupby('type').value.rank(ascending=False).sub(1).astype(int)

print(df)

  type  value rank
0    A      5    1
1    A      7    0
2    B      2    1
3    B      6    0
4    A      1    2
0
yatu 10 avril 2020 à 15:08

Cela peut être fait avec un sort_values suivi de groupby().cumcount():

df['rank'] = df.sort_values('value', ascending=False).groupby('type').cumcount()

Production:

  type  value  rank
0    A      5     1
1    A      7     0
2    B      2     1
3    B      6     0
4    A      1     2
1
Quang Hoang 10 avril 2020 à 15:12