You need to enable JavaScript to run this app. Pandas按case分组满足条件时删除组内最后一行的实现
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按case分组满足条件时删除组内最后一行的实现

Pandas 按分组规则删除目标行实现
  • 核心判定逻辑:当某行满足三个条件时触发删除:属于所在case分组的最后一行、该行action取值为A、同分组下该行的前一行(即分组倒数第二行)action取值为D
  • 实现过程无需遍历分组,完全依托pandas向量化运算完成,运行效率高
import pandas as pd

# 构造原始数据
df1 = pd.DataFrame({
    'case': [1,1,1,1,1,1,2,2,2,2,6,6,6,6,6,3,3,3,3,3,3], 
    'action': ['A','B','C','B','D','A','B','B','D','A','B','B','D','A','F','A','B','C','B','D','A']
})

# 生成分组内的删除标记掩码
mask = (
    # 定位每个分组的最后一行
    (df1.groupby('case').cumcount(ascending=False) == 0)
    # 最后一行action为A
    & (df1['action'] == 'A')
    # 同分组内最后一行的前一个值(即倒数第二行)为D
    & (df1.groupby('case')['action'].shift(1) == 'D')
)

# 过滤待删除行,重置索引得到最终结果
df2 = df1[~mask].reset_index(drop=True)

运行上述代码得到的df2与预期输出结构、取值完全一致,不会出现误删、漏删的情况。

注:上述代码适配当前数据的原始排序(即case分组内的行顺序与业务流程顺序一致),如果原始数据存在顺序混乱,需要先按业务时间/流程字段排序后再执行判定逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 04:57:03