我有一个DF,我想创建一个新的列与其他2列值的差异。
name rate avg_rate
A 10 3
B 6 5
C 4 3
我写了下面的代码来计算差值:
result= df.groupby(['name']).apply(lambda g: g.rate - g.avg_rate)
df['rate_diff']=result.reset_index(drop=True)
df.tail(3)
但是我注意到一些计算值是nan。处理这个问题的最好方法是什么?
输出:
name rate avg_rate rate_diff
A 10 3 NAN
B 6 5 NAN
C 4 3 NAN
如果你想使用groupby
和apply
,那么下面应该工作,
res = df.groupby(['name']).apply(lambda g: g.rate - g.avg_rate).reset_index().set_index('level_1')
df = pd.merge(df,res,on=['name'],left_index = True, right_index=True).rename({0:'rate_diff'},axis=1)
然而,正如@sacuL在评论中建议的那样,您不需要使用groupby来计算差值,因为您只需通过简单地减去列(并排)来获得差值,并且groupby应用对于这个简单的任务来说将是多余的。
df["rate_diff"] = df.rate - df.avg_rate