在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
相关产品推荐
相关产品推荐

