我有一个 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
答案 0 :(得分:0)
如果您想使用 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 apply 将是矫枉过正对于这个简单的任务。
df["rate_diff"] = df.rate - df.avg_rate