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

创建事件计数列表:阈值触发标记后无法生成目标数据框问题

问题分析与解决方案

你的代码目前只返回0或1,核心问题有这几个:

  • frame_of_reference['TTC_radar'].any()是检查整个列是否存在符合条件的值,不是针对当前窗口或每行做判断
  • 每次循环都重置events_ttc为单个元素的列表,没有累积标记结果,也没和原数据关联
  • 没有逻辑来提取符合条件的行并生成目标数据框

下面是针对需求的完整实现方案:

方案1:逐行标记并提取符合阈值的行

如果你的需求是逐行检查TTC_radar是否在(0,1.5]区间,标记这些行并统计数量,最后输出包含这些行的DataFrame,可以这么做:

import pandas as pd

# 确保数据是数值型(你的原有代码没问题)
frame_of_reference = frame_of_reference.apply(pd.to_numeric, errors='coerce')

# 1. 添加标记列:标记每行是否符合阈值条件
frame_of_reference['is_alert'] = frame_of_reference['TTC_radar'].apply(lambda x: 1 if 0.0 < x <= 1.5 else 0)

# 2. 统计符合条件的行数
alert_count = frame_of_reference['is_alert'].sum()
print(f"符合阈值的事件总数:{alert_count}")

# 3. 提取所有标记为1的行,生成目标数据框
alert_frame = frame_of_reference[frame_of_reference['is_alert'] == 1].copy()

# 查看结果
print(alert_frame)

方案2:按滑动窗口(window_size=10)标记并提取

如果你的需求是按窗口大小10来检查每个窗口内是否存在符合阈值的数据,并标记窗口内的行,或者提取包含符合条件值的窗口数据,可以用滑动窗口的方式:

import pandas as pd

frame_of_reference = frame_of_reference.apply(pd.to_numeric, errors='coerce')
window_size = 10

# 1. 用滑动窗口检查每个窗口内是否有符合条件的值,生成窗口标记
frame_of_reference['window_alert'] = frame_of_reference['TTC_radar'].rolling(window=window_size, min_periods=1).apply(
    lambda window: 1 if any(0.0 < x <= 1.5 for x in window) else 0, raw=True
)

# 2. 统计有多少个窗口触发警报
window_alert_count = frame_of_reference['window_alert'].value_counts().get(1, 0)
print(f"触发警报的窗口数量:{window_alert_count}")

# 3. 提取所有包含警报窗口的行
alert_window_frame = frame_of_reference[frame_of_reference['window_alert'] == 1].copy()
print(alert_window_frame)

关键说明

  • 如果你需要的是每行级别的标记,方案1更直接,能精准定位到每个触发阈值的行
  • 如果是窗口级别的检测,方案2用rolling实现滑动窗口,确保每个窗口内的情况都被捕捉到
  • 两种方案都保留了原数据的所有信息,同时添加了标记列,方便后续分析

内容的提问来源于stack exchange,提问作者Alieu F. Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:04:02