python датафрейм для применения функции для каждой группы без цикла - PullRequest
4 голосов
/ 10 апреля 2020

У меня есть фрейм данных

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

Я должен был применить функцию для групп столбца type, поэтому ранг будет применяться для каждого типа, и новый df будет

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

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Это можно сделать с помощью 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
0 голосов
/ 10 апреля 2020

Вы можете использовать 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
...