首页 > 解决方案 > 根据python数据框中的条件对行值求和

问题描述

df

你好社区,

在我的数据框中,我有以下三列:

restaurant_id、annee、moyenne_etoile_annee。

对于每个餐厅 ID,我想减去去年的“moyenne_etoiles_annee”减去第一年的。

例如,对于第一个 restaurant_id df[diff]=moyenne_etoiles_annee(2017)-moyenne_etoiles_annee(2015) 2-2.66=-0.66

我尝试 .agg 并选择第一个和最后一个值,但无法正确执行。

样本:

df = pd.DataFrame({"restaurant_id": [1,1,2,2],
                   "annee": [2015,2016,2019,2022],
                   "moyenne_etoile_annee": [1.2,1.4,1.3,1.3]}) 

标签: pythonpandasdataframe

解决方案


restaurant_id如果问题数据中的唯一年份,则解决方案运行良好。

首先对 first 和 last per使用DataFrame.sort_valuesper 两列(如有必要),然后减去并value per in :anneerestaurant_idfirstlastrestaurant_idGroupBy.transform

df1 = df.sort_values(['restaurant_id','annee'])
g = df1.groupby('restaurant_id')['moyenne_etoile_annee']
df1['diff'] = g.transform('last').sub(g.transform('first'))

使用 lambda 函数的替代方案:

df1 = df.sort_values(['restaurant_id','annee'])
g = df1.groupby('restaurant_id')['moyenne_etoile_annee']
df1['diff'] = g.transform(lambda x: x.iat[-1] - x.iat[0])

推荐阅读