带lambda的Pandas Groupby给出了一些nan



我有一个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

如果你想使用groupbyapply,那么下面应该工作,

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

最新更新