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

