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

如何检测Pandas DataFrame中值跨越多个阈值的时刻?

问题

  • 现有两个Pandas对象:
    • sensor_values:DataFrame,包含rta和next_rta字段,next_rta是rta向后偏移一位的结果
    • thresholds:单调递增的Series
  • 需求:识别sensor_values中哪些时刻的数值跨越了thresholds中的任意一个阈值(类似单阈值检测的多阈值扩展)
  • 尝试的错误代码:
threshold_cross = (((sensor_values.rta >= thresholds.any()) & (sensor_values.next_rta < thresholds.any())) | ((sensor_values.next_rta > thresholds.any()) & (sensor_values.rta <= thresholds.any())) | (sensor_values.rta == thresholds.any()))
  • 前提假设:当前仅处理单调递增的sensor_values和thresholds,后续再扩展递减场景

解决方案

原代码核心问题是误用thresholds.any()——该方法返回单个布尔值(判断是否存在任意阈值满足条件),而非逐个阈值做交叉检测。利用两者均单调递增的特性,可采用以下高效方法:

方法1:基于区间分配的跨阈值检测(适配单调场景)

因为sensor_values和thresholds都是单调递增的,我们可以给每个rta和next_rta分配其所在的阈值区间,只要前后区间不同,就说明跨越了至少一个阈值;同时单独判断数值刚好等于阈值的情况:

# 构造包含正负无穷的区间边界,覆盖所有可能的数值
bins = [-float('inf')] + thresholds.tolist() + [float('inf')]
# 给rta和next_rta分配对应的区间索引
rta_bins = pd.cut(sensor_values['rta'], bins=bins, labels=False)
next_rta_bins = pd.cut(sensor_values['next_rta'], bins=bins, labels=False)

# 检测三种跨阈值情况:区间变化/当前值等于阈值/下一个值等于阈值
threshold_cross = (rta_bins != next_rta_bins) | \
                  (sensor_values['rta'].isin(thresholds)) | \
                  (sensor_values['next_rta'].isin(thresholds))

方法2:广播式逐阈值检测(通用非单调场景)

若后续需扩展到非单调场景,可通过广播让每个rta/next_rta对所有阈值做检测:

# 生成rta与所有阈值的比较矩阵(每行对应一个rta值,每列对应一个阈值)
rta_ge_threshold = sensor_values['rta'].values[:, None] >= thresholds.values
next_rta_lt_threshold = sensor_values['next_rta'].values[:, None] < thresholds.values
next_rta_ge_threshold = sensor_values['next_rta'].values[:, None] >= thresholds.values
rta_lt_threshold = sensor_values['rta'].values[:, None] < thresholds.values

# 检测跨越任意阈值的三种情况:递增跨越/递减跨越/刚好等于阈值
cross_up = (rta_lt_threshold & next_rta_ge_threshold).any(axis=1)
cross_down = (rta_ge_threshold & next_rta_lt_threshold).any(axis=1)
exact_match = sensor_values['rta'].isin(thresholds) | sensor_values['next_rta'].isin(thresholds)

threshold_cross = cross_up | cross_down | exact_match

关键说明

  • 方法1利用单调特性,计算效率远高于方法2,完全适配当前场景
  • 两种方法均覆盖了递增跨越、递减跨越、刚好落在阈值上三种核心情况
  • 后续处理递减场景时,只需替换对应阈值列表,逻辑完全通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:01:01