У меня есть фрейм данных
df = type value A 5 A 7 B 2 B 6 A 1
Я должен был применить функцию для групп столбца type, поэтому ранг будет применяться для каждого типа, и новый df будет
type
df = type value rank A 5 1 A 7 0 B 2 1 B 6 0 A 1 2
Это можно сделать с помощью sort_values, за которым следует groupby().cumcount():
sort_values
groupby().cumcount()
df['rank'] = df.sort_values('value', ascending=False).groupby('type').cumcount()
Выход:
type value rank 0 A 5 1 1 A 7 0 2 B 2 1 3 B 6 0 4 A 1 2
Вы можете использовать groupby.rank, настройка ascending=False:
groupby.rank
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