在pandas数据框中的组中除以最大值

时间:2019-07-10 10:22:54

标签: pandas dataframe group-by max

我在下面有一个数据框:

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 个答案:

答案 0 :(得分:1)

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())