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

如何按标签分组提取DataFrame中各动作的起止时间

问题

我有一个包含视频时间(单位:秒)和动作标签的DataFrame,希望为每个标签生成对应的动作起止时间列表。

示例数据:

Time(sec)Label
760
770
780
791
801
811
820
830
841

期望输出格式:

Label_Class_0 = [[76,78],[82,83],...]
Label_Class_1 = [[79,81],[84,..],...]

解决方案

利用Pandas的分组功能,先标记连续相同标签的分组,再聚合每组的起止时间,具体实现如下:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Time(sec)': [76,77,78,79,80,81,82,83,84],
    'Label': [0,0,0,1,1,1,0,0,1]
})

# 标记连续相同标签的分组
df['group'] = (df['Label'] != df['Label'].shift()).cumsum()

# 按标签+分组聚合,提取每组的起止时间
agg_result = df.groupby(['Label', 'group']).agg(
    start_time=('Time(sec)', 'min'),
    end_time=('Time(sec)', 'max')
).reset_index()

# 整理为期望的格式
label_time_ranges = {}
for label in agg_result['Label'].unique():
    ranges = agg_result[agg_result['Label'] == label][['start_time', 'end_time']].values.tolist()
    label_time_ranges[f'Label_Class_{label}'] = ranges

# 输出结果
for key, value in label_time_ranges.items():
    print(f"{key} = {value}")

运行结果

Label_Class_0 = [[76, 78], [82, 83]]
Label_Class_1 = [[79, 81], [84, 84]]

逻辑说明

  1. 标记连续分组:通过对比当前行标签与上一行标签的差异,生成累计分组号,确保连续相同标签被归为同一组。
  2. 聚合起止时间:按标签和分组号双重分组,对每组的时间列取最小值(起始时间)和最大值(结束时间)。
  3. 格式整理:遍历每个标签,提取对应的时间区间列表,转换成期望的变量格式输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:15:57