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

如何对Pandas DataFrame按id分组取yes行前一行,处理无前置行场景

解决方案

你可以通过分组内位移来同时解决分组逻辑和边界异常问题,代码如下:

import pandas as pd

# 你的样例数据
df = pd.DataFrame(data={'id':[3,3,3,3,3,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7], 
     'outcome': ['no','no','no','yes','no','no','no','yes','yes','no','no','yes','yes','yes','yes','yes','no','no','no', 'no', 'yes', 'no', 'no', 'yes']})

# 核心逻辑:按id分组后,取每组内「下一行outcome为yes」的当前行
mask = df.groupby('id')['outcome'].shift(-1).eq('yes')
pre_df = df[mask]

方案说明

  • 分组内使用shift(-1),位移操作只会在同一个id的组内生效,不会出现跨组取上一行的问题,满足分组需求
  • 如果某组内第一行就是yes,它对应的上一行不存在,生成的mask对应位置会自动为False,不会被筛选出来,解决了无上行的异常
  • 连续多个yes相邻的情况,只会取第一个yes的上一行,后面的yes的上一行是yes,不会被筛选,符合你忽略yes行之后内容的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:01