You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas按id分组后根据序列下一行值删除指定行的实现方法

实现方法

你已经完成了核心逻辑的雏形,只需要把对比操作限制在每个id分组内即可,避免跨id的行产生错误对比,完整代码如下:

# 按id分组,组内将outcome字段后移一位,用eq方法做等值对比避免NaN比较异常,保留连续相同outcome的最后一条
mask = ~df.groupby('id')['outcome'].shift(-1).eq(df['outcome'])
result = df[mask].reset_index(drop=True)

逻辑说明

  1. 你的数据已经提前按id分组且组内按date升序排序,不需要额外做排序处理
  2. groupby('id')['outcome'].shift(-1)会把每个id分组内的outcome值向上挪一行,每个分组的最后一行对应的值为NaN
  3. 对比得到的掩码mask为True的行,就是「当前行outcome和下一行不同」的行,刚好符合你「相同则删除当前行,只保留连续相同值的最后一条」的规则
  4. 如果你实际使用的字段名不是outcome(你示例代码里写的是alerts),替换为实际字段名即可

输出验证

按上述代码执行后,id=3的分组输出和你给出的期望结果完全一致:

id  date       outcome
3   04/09/2019  no
3   30/10/2019  yes
3   03/05/2020  no

内容的提问来源于stack exchange,提问作者Ze0ruso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:36:03