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

使用Pandas将通话数据按15分钟间隔拆分并按专家和日期分组

实现代码

import pandas as pd

def split_duration(row):
    split_records = []
    current_time = row["Interval Start"]
    remaining_sec = row["status_duration"]
    
    while remaining_sec > 0:
        # 向下取整得到当前所属15分钟区间的起始时间
        interval_start = current_time.floor("15T")
        # 计算当前15分钟区间的结束时间
        interval_end = interval_start + pd.Timedelta(minutes=15)
        # 当前区间可分配的最大时长:区间剩余时长和剩余总时长取最小值
        available_sec = (interval_end - current_time).total_seconds()
        allocated_sec = min(remaining_sec, available_sec)
        
        # 生成分拆后的单条记录
        split_records.append({
            "specialist": row["specialist"],
            "Language": row["Language"],
            "Interval Start": interval_start,
            "status_duration": allocated_sec
        })
        
        # 更新剩余时长和下一次计算的起始时间
        remaining_sec -= allocated_sec
        current_time = interval_end
    return split_records

# 处理输入DataFrame
result = pd.DataFrame([record for _, row in df.iterrows() for record in split_duration(row)])

测试验证

你可以直接用你提供的补充原始数据测试:

df = pd.DataFrame(
    data=[['Mel Gibson', 'German', '2021-9-23 14:22:38', 301 ],
          ['Mel Gibson', 'German', '2021-9-23 14:27:40', 4678 ],
          ['Mel Gibson', 'German','2021-9-24 13:33:22',12]],
    columns=['specialist', 'Language', 'Interval Start', 'status_duration']
)
df['Interval Start'] = pd.to_datetime(df['Interval Start'])

运行上述实现代码后,所有行都会正常拆分,不会出现跳过的情况,且完全符合时长分配规则:每个区间分配的时长不会超过区间内实际可覆盖的秒数,跨区间的时长会自动拆分到后续15分钟区间,直到全部分配完毕。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:57:03