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

聚合连续检测的起止时间以计算总检测时长

合并连续音频检测时间段

问题说明

用算法对音频文件做声音检测后,得到包含检测开始(start)、结束(end)时间的数据集。由于预测每3秒执行一次,需要聚合数据:若第n+1行的start等于第n行的end,则合并这些连续行,得到完整的检测时段及对应时长。

示例数据集

import pandas as pd

data = {
    'filename': ['file1', 'file1', 'file1', 'file1', 'file1', 'file2', 'file2', 'file2', 'file2', 'file2'],
    'start': [21, 24, 27, 44, 60, 34, 37, 55, 58, 120],
    'end':  [24, 27, 30, 47, 63, 37, 40, 58, 61, 123]}
df = pd.DataFrame(data)

期望聚合结果

filenamestartendduration
file121309
file144473
file160633
file234406
file255616
file21201233

实现代码

# 按文件名分组处理,确保每个文件的时间段独立计算
df_grouped = df.groupby('filename', group_keys=False).apply(lambda g: 
    # 生成连续组标识:当前行start与上一行end不相等时,标记为新组
    g.assign(group_id=(g['start'] != g['end'].shift()).cumsum())
).groupby(['filename', 'group_id']).agg(
    start=('start', 'first'),
    end=('end', 'last')
).reset_index(drop=True)

# 计算每个时段的时长
df_grouped['duration'] = df_grouped['end'] - df_grouped['start']

print(df_grouped)

代码逻辑说明

  1. 按文件分组:以filename为分组依据,保证不同音频文件的时间段不会混淆。
  2. 标记连续时段:通过g['start'] != g['end'].shift()判断当前行是否与上一行连续,用cumsum()生成递增的组ID,将连续的行归为同一组。
  3. 聚合计算:按filename和组ID聚合,取每组的第一个start、最后一个end,再通过end - start计算时段时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:30:42