您好社区,
在我的数据框中,我有三列,如下所示:
restaurant_id,年份,平均星级。
对于每个restaurant_id,我要减去上一年的“ moyenne_etoiles_annee”减去第一年的“ moyenne_etoiles_annee”。
例如第一个restaurant_id df [diff] = moyen_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]})
如果restaurant_id
有问题的数据的唯一年份有效,则该解决方案效果很好。
首先利用DataFrame.sort_values
每两列(如果需要)的第一个和最后annee
按restaurant_id
,然后减去first
并且last
每个值restaurant_id
在GroupBy.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])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句