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

在Pandas中基于分组及指定条件计算时间差的问题

解决Pandas按分组条件计算时间差方案

完整可运行代码

import pandas as pd
import numpy as np

# 原始输入数据
input_data = {
    "Name": ["Tom", "Tom", "nick", "krish", "krish", "jack", "krish"],
    "Age": [20, 20, 21, 19, 19, 18, 19],
    "Time": [
        "2021-09-23 00:01:00",
        "2021-09-24 00:02:00",
        "2021-09-23 00:01:00",
        "2021-09-23 00:01:00",
        "2021-09-23 00:10:00",
        "2021-09-23 00:01:00",
        "2021-09-25 00:03:00",
    ],
    "Value": [1, 5, 1, 1, 17, 2, 8],
}
df = pd.DataFrame(input_data)

# 转换时间列为datetime格式,支持时间运算
df['Time'] = pd.to_datetime(df['Time'])

# 定义分组处理函数
def calc_diff(group):
    # 匹配组内第一条Value=1的起始记录
    start_mask = group['Value'] == 1
    if not start_mask.any():
        group['Diff_hours'] = np.nan
        return group
    start_time = group.loc[start_mask, 'Time'].iloc[0]
    
    # 匹配组内第一条Value为9/17的结束记录
    end_mask = group['Value'].isin([9,17])
    if not end_mask.any():
        group['Diff_hours'] = np.nan
        return group
    end_time = group.loc[end_mask, 'Time'].iloc[0]
    
    # 计算时间差,当前返回分钟数符合示例输出的9,如需小时可修改除数为3600
    diff = (end_time - start_time).total_seconds() / 60
    group['Diff_hours'] = int(diff)
    return group

# 按Name分组应用计算逻辑
df_output = df.groupby('Name', group_keys=False).apply(calc_diff)

# 验证输出
print(df_output)

实现逻辑

  • 时间格式转换是后续时间差计算的基础,避免字符串运算的异常问题
  • 分组后优先校验组内是否同时存在符合要求的起始、结束记录,任意一种缺失则该组返回空值
  • 匹配规则默认取组内第一条符合条件的起始、结束记录,可根据业务需求调整为最早/最晚匹配逻辑
  • 时间差单位可灵活调整,仅需修改秒数转换的除数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:00