You need to enable JavaScript to run this app. Pandas按人员分组统计DataFrame内会话时间的重叠帧计数
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按人员分组统计DataFrame内会话时间的重叠帧计数

按分组维度计算会话时间重叠数实现

问题说明

  • 原有全表重叠计数逻辑会跨所属人员匹配会话,不符合仅统计同人员会话重叠的业务要求
  • 核心偏差:原有两两时间比对的广播矩阵覆盖整张表,未限制匹配范围为当前行所属的name分组

实现思路

  • 直接复用原有的重叠判断逻辑,先按name字段对数据集分组
  • 对每个分组的子表单独执行重叠计数计算,从根源上避免跨组匹配
  • 最后拼接所有分组的计算结果,得到完整的输出数据集

具体代码实现

  1. 预处理时间字段,确保可直接做大小比较:
import pandas as pd
# 转换时间格式为datetime类型
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])
  1. 定义分组内部的重叠计数函数,完全复用原有比对逻辑:
def calc_group_overlap(group_df):
    # 仅在当前分组的子表内执行广播比对
    ends = group_df['start_time'].values < group_df['end_time'].values[:, None]
    starts = group_df['start_time'].values > group_df['start_time'].values[:, None]
    # 按原有规则计算重叠计数
    group_df['overlap'] = (ends & starts).sum(0)
    return group_df
  1. 按name分组应用函数,关闭分组键避免引入额外列:
# 分组计算后拼接结果,不保留分组键列
df = df.groupby('name', group_keys=False).apply(calc_group_overlap)

输出效果

执行上述代码后,得到的结果完全匹配预期:

id  start_time              end_time             name   overlap
1   2021-02-10 10:37:35     2021-02-10 12:16:22  Bob    2
2   2021-02-10 11:09:39     2021-02-10 13:06:25  Bob    1
3   2021-02-10 12:10:33     2021-02-10 17:06:26  Bob    0
4   2021-02-10 15:05:08     2021-02-10 21:07:05  Sally  1 
5   2021-02-10 21:07:26     2021-02-10 21:26:37  Sally  0  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 21:36:08