Разделите по максимуму внутри группы в панде - PullRequest
1 голос
/ 10 июля 2019

У меня есть нижеприведенный кадр данных:

cola colb 
 a    10  
 a    12
 a    30  
 b    20  
 b    25

Я хотел бы добавить новый столбец, например: для каждой группы найдите максимум и затем рассчитайте

newcol = (max (withingroupcola)-colb) / max (withingroupcola) внутри каждой группы, как показано ниже:

cola colb    newcol
 a    10   (30-10)/30 
 a    12   (30-12)/30  
 a    30   (30-30)/30
 b    20   (25-20)/25
 b    25   (25-25)/25

, а затем сортировать внутри группы desc.Как я могу сделать это в панде данных?Пожалуйста помоги.Спасибо.

Нет: я пытаюсь масштабировать, если есть функция масштабирования, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 10 июля 2019

Используйте GroupBy.transform для нового Series, затем сначала вычтите на Series.sub, а затем разделите на Series.div:

s = df.groupby('cola')['colb'].transform('max')
df['new'] = s.sub(df['colb']).div(s)

print (df)
  cola  colb       new
0    a    10  0.666667
1    a    12  0.600000
2    a    30  0.000000
3    b    20  0.200000
4    b    25  0.000000

Другое решение, более медленное:

df['new'] = df.groupby('cola')['colb'].apply(lambda x: (x.max()- x) / x.max())
...