带有 lambda 的 Pandas Groupby 给出了一些 NAN

时间:2021-02-05 20:44:16

标签: python pandas dataframe

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

1 个答案:

答案 0 :(得分:0)

如果您想使用 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 apply 将是矫枉过正对于这个简单的任务。

df["rate_diff"] = df.rate - df.avg_rate
相关问题