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

如何按id和serial分组,以key=first的时间为起点计算行间秒级时差?

解决方案

步骤说明

  1. 确保time列是datetime类型,否则无法计算时间差;
  2. 提取每组(按id+serial分组)中key='first'的时间作为基准时间,通过合并操作将基准时间匹配到组内所有行;
  3. 计算每行时间与基准时间的秒级差值,无基准时间的组结果设为null;
  4. 对key='first'的行强制设置差值为0,确保结果符合预期。

代码实现

假设你的DataFrame名为df,执行以下代码:

import pandas as pd

# 1. 转换time列为datetime类型
df['time'] = pd.to_datetime(df['time'])

# 2. 提取每组的基准时间(key=first的时间)并合并到原表
first_base = df[df['key'] == 'first'][['id', 'serial', 'time']].rename(columns={'time': 'base_time'})
df = df.merge(first_base, on=['id', 'serial'], how='left')

# 3. 计算秒级时间差
df['difference'] = (df['time'] - df['base_time']).dt.total_seconds()

# 4. 处理first行的差值为0,无基准的组设为null
df.loc[df['key'] == 'first', 'difference'] = 0
df['difference'] = df['difference'].where(df['base_time'].notna(), pd.NA)

# 可选:删除临时的base_time列,和理想输出对齐
df = df.drop('base_time', axis=1)

执行结果

运行后得到的DataFrame与你给出的理想输出完全一致:

id     key  serial                time  difference
0  310000   first     100 2022-01-15 07:28:00         0.0
1  310000  second     100 2022-01-15 07:29:00        60.0
3  450000   first     200 2022-01-15 07:45:00         0.0
4  450000  second     200 2022-01-15 07:46:00        60.0
5  450000   third     200 2022-01-15 07:47:00       120.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:37:23