如何检测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
相关产品推荐
相关产品推荐

