我在下面有一个数据框:
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组中排序。如何在熊猫数据框中执行此操作?请帮忙。 谢谢。
否:如果有缩放功能,我正在尝试缩放。请告诉我。
答案 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())