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

如何计算每个participant的首次与末次测试时间差并生成新列

Pandas 同ID最早/最晚时间差计算方案

你之前使用diff()没有得到预期结果,是因为diff()的作用是计算组内相邻两行的时间差,而非同一个分组下最大值与最小值的差。

前置步骤

首先需要将时间列转为pandas datetime格式,避免字符串计算报错:

import pandas as pd
df['createdOn'] = pd.to_datetime(df['createdOn'])

注:如果你的实际数据中用户ID列名为healthCode,将下方代码中的participant替换为healthCode即可。


方案1:生成仅含用户ID和对应时间差的新DataFrame

通过groupby.agg先计算每个用户的最早、最晚测试时间,再求差值:

time_diff_df = df.groupby('participant')['createdOn'].agg(
    first_test='min',
    last_test='max'
).assign(
    # 差值默认是timedelta格式,可按需转成秒、小时、天等单位
    total_duration=lambda x: x['last_test'] - x['first_test']
    # 示例:转成小时单位的话用下面这行
    # total_duration=lambda x: (x['last_test'] - x['first_test']).dt.total_seconds() / 3600
).reset_index()[['participant', 'total_duration']]

方案2:将时间差作为新列添加到原DataFrame

通过transform将组内计算结果广播到组内所有行,实现原表新增列:

df['total_duration'] = df.groupby('participant')['createdOn'].transform(
    lambda x: x.max() - x.min()
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:09:03