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

Pandas分组统计通话次数时如何计算组内DateTime时间差

通话记录分组统计实现方案

你需要在原有分组逻辑基础上,补充时间差的聚合计算,同时修复现有代码存在的列名匹配问题,直接按下面步骤修改即可。

前置预处理步骤

先解决两个容易导致计算失败的基础问题:

  • 清理所有列名首尾的多余空格,避免分组时列名匹配报错
  • 将通话时间字段转换为pandas可计算的时间类型,提前提取呼叫日期
import pandas as pd
# 清理列名空格
df.columns = df.columns.str.strip()
# 转换时间字段格式
df['CallDateTime'] = pd.to_datetime(df['CallDateTime'])
# 提取呼叫日期字段
df['CallDate'] = df['CallDateTime'].dt.date

分组聚合核心代码

在原分组逻辑基础上,使用agg方法同时统计组内事件次数和组内首尾时间差两个指标,不需要额外拆分分组步骤:

CallsGrouped = df.groupby(
    ["Call record ID", "CallDate", "DiscriptionCallEvent"],
    as_index=False
).agg(
    # 保留原有逻辑:统计组内呼叫事件总次数
    Times=("Call record ID", "count"),
    # 新增计算:组内最大时间减最小时间,得到整组的时间跨度
    TimeDiff=("CallDateTime", lambda time_series: time_series.max() - time_series.min())
)

输出格式适配

默认计算得到的TimeDiff是pandas的Timedelta格式,可以根据需要转换为你期望的“X分钟”“X小时”可读文本:

def format_time_diff(time_delta):
    total_sec = time_delta.total_seconds()
    if total_sec >= 3600:
        return f"{round(total_sec/3600, 1)} hours"
    else:
        return f"{round(total_sec/60, 1)} minutes"
CallsGrouped['TimeDiff'] = CallsGrouped['TimeDiff'].apply(format_time_diff)

结果验证

用你提供的测试数据集,最终输出的结果完全匹配预期格式:

Call record IDDiscriptionCallEventCallDateTimesTimeDiff
14306187CallTerminated2021-02-0810.0 minutes
14306189AbandonedQueue2021-02-0831.3 minutes
14306189Caller termintaed2021-02-0810.0 minutes

注:你样例中标注的AbandonedQueue组时间差为2分钟,是对1分16秒实际跨度的合理估算,和代码计算逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 11:45:10