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

如何删除DataFrame中含NoProduct的行仅保留最后一行并计算delta

实现代码

import pandas as pd

# 1. 生成连续相同ProductCase的分组ID
df['group_id'] = (df['ProductCase'] != df['ProductCase'].shift()).cumsum()

# 2. 筛选需要保留的行:所有Product行 + 每段NoProduct组的最后一行
mask = (
    (df['ProductCase'] == 'Product') 
    | 
    ((df['ProductCase'] == 'NoProduct') & (df.groupby('group_id').cumcount(ascending=False) == 0))
)
df_res = df[mask].copy()

# 3. 重新计算delta和time字段
df_res['delta'] = df_res['timestamp'].diff()
df_res['time'] = df_res['delta'].dt.total_seconds()

# 4. 清理辅助列,重置索引
df_res = df_res.drop(columns='group_id').reset_index(drop=True)

步骤说明

  • 分组逻辑:用shift()对比当前行和上一行的ProductCase值,不一致时分组编号+1,即可把连续相同的记录归到同一个分组
  • 筛选逻辑:对每个NoProduct分组用cumcount(ascending=False)倒序计数,计数值为0的就是该组最后一行,直接保留即可
  • 字段重算:diff()直接计算相邻两行的时间差得到新delta,再提取总秒数赋值给time字段,结果完全匹配预期输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:15:03