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

如何删除重复流程中间数据,仅保留分组首个start和最后end对应时间戳

实现方法

你可以通过Pandas的分组筛选+结果拼接逻辑实现需求,核心是按Id分组后分别提取首个start记录、末尾end记录再合并,具体操作如下:

首先确保timestamp列转换为时间类型,避免后续筛选排序出现异常:

import pandas as pd

# 构造示例数据,实际使用时替换为你自己的DataFrame即可
data = {
    "Id": [1, 1, 1, 1],
    "activity": ["start", "end", "start", "end"],
    "sequence": [1, 2, 1, 2],
    "timestamp": pd.to_datetime([
        "2020-06-12 09:51:42",
        "2020-06-12 09:51:42",
        "2020-06-12 09:58:52",
        "2020-06-12 10:12:22"
    ])
}
df = pd.DataFrame(data)

# 分组筛选目标记录
# 取每个Id对应的第一条start记录
start_part = df[df["activity"] == "start"].groupby("Id", as_index=False).first()
# 取每个Id对应的最后一条end记录
end_part = df[df["activity"] == "end"].groupby("Id", as_index=False).last()

# 合并两部分结果,按Id、sequence排序得到最终输出
result = pd.concat([start_part, end_part], ignore_index=True).sort_values(by=["Id", "sequence"])

如果你需要end行的时间和你给出的示例输出一致(取对应Id下最新的start时间),可以在上述逻辑基础上调整end部分的时间赋值:

# 计算每个Id的最大start时间
max_start = df[df["activity"] == "start"].groupby("Id")["timestamp"].max().reset_index()
# 替换end部分的timestamp字段
end_part = end_part.merge(max_start, on="Id", suffixes=("", "_tmp"))
end_part["timestamp"] = end_part["timestamp_tmp"]
end_part = end_part.drop("timestamp_tmp", axis=1)

内容的提问来源于stack exchange,提问作者Alde Joshua Wibowo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:54:05