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

Python中如何根据距离条件提取多个不连续的时间范围?

解决方法

核心思路是识别连续符合条件的行组,再对每个组提取首尾时间。用Pandas可以这样实现:

  1. 标记符合距离条件的行
    新增一列is_important,标记该行是否属于重要事件范围:

    import pandas as pd
    
    # 构造示例DataFrame
    df = pd.DataFrame({
        'Timestamp': ['1s', '2s', '3s', '4s', '5s'],
        'Dist from Each Other': [1000, 2000, 3000, 2000, 1000]
    })
    
    # 标记符合条件的行
    df['is_important'] = df['Dist from Each Other'].between(1000, 2000)
    
  2. 为连续的符合条件行分配组ID
    通过对比当前行和上一行的is_important状态,生成组ID,这样断开的区间会被分到不同组:

    # 计算状态变化的点,生成组ID
    df['group_id'] = (df['is_important'] != df['is_important'].shift()).cumsum()
    
  3. 过滤并提取每个组的时间范围
    只保留符合条件的组,然后按组分组取首尾时间,最后整理成需要的格式:

    # 筛选出重要事件的组,分组后提取首尾时间
    result = df[df['is_important']].groupby('group_id').agg(
        start_time=('Timestamp', 'min'),
        end_time=('Timestamp', 'max')
    )
    
    # 整理成"X-Y秒"的格式
    result['time_range'] = result['start_time'].str.replace('s', '') + '-' + result['end_time'].str.replace('s', '') + '秒'
    
    # 输出结果
    print(result['time_range'].tolist())
    

运行这段代码后,会得到预期结果:['1-2秒', '4-5秒']

原理说明:

  • between(1000,2000)直接标记符合距离区间的行;
  • shift()对比当前行和上一行的状态,cumsum()给每一段连续的相同状态分配唯一ID,中间不符合条件的行(比如第3秒)会把前后的符合条件行分成不同组;
  • 最后分组取首尾时间,就能得到每个独立的重要事件时间范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:45:31