python - 根据python数据框中的条件对行值求和
问题描述
你好社区,
在我的数据框中,我有以下三列:
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]})
解决方案
restaurant_id
如果问题数据中的唯一年份,则解决方案运行良好。
首先对 first 和 last per使用DataFrame.sort_values
per 两列(如有必要),然后减去并value per in :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])
推荐阅读
- c# - C#/C++ 重定向另一个进程的标准输入
- javascript - 有效的解决方法,而不是使用大量的 if 语句?
- elasticsearch - 使用 logstash 的 Mqtt 输入
- javascript - 读取一个巨大的 csv 文件并使用 d3 在 Javascript 中填充地图
- wordpress - WooCommerce:无法通过functions.php从单个产品页面中删除价格
- java - Java Springboot 的 Elastic Search 与众不同
- javascript - 有什么方法可以跟踪 gulp-rev 在 rev-mainfest.json 文件中创建的所有 js 文件?
- c# - .NET Core 中的 WSDL 端点配置
- doctrine-orm - 在构造函数中或通过 UuidGenerator 注解手动生成 Uuid
- reactjs - 将 GraphQL 查询传递给 Apollo MockedProvider