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

Pandas按id分组拼接lag<1秒连续行process并更新时间字段的方法

解决方案

步骤1:转换lag列为时间差类型

你的lag列目前是字符串格式,无法直接做时间长度比较,首先转成pandas的timedelta类型:

import pandas as pd
import numpy as np

# 你给出的原始DataFrame构造代码
data = {'process': ['buying','selling','searhicng','repairing', 'preparing', 'selling','buying', 'searching', 'selling','searching'],
        'type': ['in_progress','in_progress','end','in_progress', 'end', 'in_progress','in_progress', 'end', 'in_progress','end'],
        'country': ['usa',np.nan, 'usa','ghana', np.nan,'end','portugal', np.nan, np.nan,'england'],
        'id': ['022','022','022', '011','011', '011','011', '011', '011','011'],
        'lag': ['00:00:10.042721','00:00:00.042721','00:00:05.042721','00:10:00.042721','00:00:00.042721','00:00:00.042721','00:00:50.042721','00:00:00.042721','00:00:00.042721','00:00:00.042721'],
        'created': ['2021-07-01','2021-07-02','2021-07-03','2021-07-04','2021-07-05','2021-07-06','2021-07-06','2021-07-08','2021-07-09','2021-07-10'],
        'next_created': ['2021-07-01','2021-07-02','2021-07-03','2021-07-04','2021-07-05','2021-07-06','2021-07-07','2021-07-08','2021-07-09','2021-07-10']
}
df = pd.DataFrame(data, columns = ['process','type','country', 'id','lag','created','next_created'])

# 转换lag为时间差类型
df['lag'] = pd.to_timedelta(df['lag'])

步骤2:构造连续块的分组ID

你猜测用cumsum的思路完全正确,你提到的df['lag'].shift(1).???.cumsum()中???的核心逻辑是判断当前行的lag是否小于1秒的状态,和上一行是否不一致,每次状态变化就累加1,就能把连续同状态的行划到同一个分组:

# 先标记当前行lag是否小于1秒
df['is_less_1s'] = df['lag'] < pd.Timedelta(seconds=1)
# 按id分组,状态变化时累加生成块ID
df['block_id'] = df.groupby('id')['is_less_1s'].apply(lambda x: (x != x.shift()).cumsum())

步骤3:按id和块ID分组聚合

按照需求规则聚合即可:

result = df.groupby(['id', 'block_id']).agg(
    process = ('process', ','.join),
    created = ('created', 'first'),
    next_created = ('next_created', 'last')
).reset_index(drop=True)

最终结果示例

processcreatednext_created
repairing2021-07-042021-07-04
preparing,selling2021-07-052021-07-06
buying2021-07-062021-07-07
searching,selling,searching2021-07-082021-07-10
buying2021-07-012021-07-01
selling2021-07-022021-07-02
searhicng2021-07-032021-07-03

如果需要保留type、country等其他字段,在agg中自行添加对应聚合规则即可。

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

相关产品推荐
方舟 Agent Plan

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

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