Python实现:判断HDF表中传感器数据所属的案例类别
匹配传感器数据到对应案例类别解决方案
核心逻辑
要判断传感器数据所属的案例类别,关键是先为每个案例的analog和temperature指标设定合理的范围阈值(比如基于常量值的浮动比例或固定偏差),再逐一检查传感器每行数据是否落在某个案例的指标范围内,匹配成功则标记对应的case编号。
基于Python Pandas的实现(含示例验证)
假设我们用Pandas处理HDF表,以下是针对你提供的示例数据的具体步骤:
1. 加载并预处理案例表
首先加载案例数据,并为每个案例计算指标范围(这里以±8%的analog浮动和±2的温度固定偏差为例,你可以根据实际业务场景调整阈值):
import pandas as pd # 加载案例HDF表(替换为你的实际HDF读取代码,比如pd.read_hdf()) case_df = pd.DataFrame( [[1500, 22, 0], [1100, 40, 1], [2400, 19, 2]], columns=['analog', 'temperature', 'case'] ) # 计算每个案例的指标范围 case_df['analog_low'] = case_df['analog'] * 0.92 case_df['analog_high'] = case_df['analog'] * 1.08 case_df['temp_low'] = case_df['temperature'] - 2 case_df['temp_high'] = case_df['temperature'] + 2
2. 加载传感器数据并匹配案例
接下来加载传感器数据,通过向量化操作高效匹配对应案例:
# 加载传感器HDF表(同样替换为实际读取代码) sensor_df = pd.DataFrame( [[1420, 20], [1000, 39], [2300, 29]], columns=['analog', 'temperature'] ) # 批量匹配每个传感器行对应的案例 matched_cases = [] for _, row in sensor_df.iterrows(): # 筛选出当前行落在范围内的案例 valid_cases = case_df[ (case_df['analog_low'] <= row['analog']) & (row['analog'] <= case_df['analog_high']) & (case_df['temp_low'] <= row['temperature']) & (row['temperature'] <= case_df['temp_high']) ] # 取第一个匹配的case编号(若有多个匹配需额外处理逻辑) matched_cases.append(valid_cases['case'].iloc[0] if not valid_cases.empty else None) sensor_df['case'] = matched_cases
示例结果验证
对于传感器第一行数据(1420, 20):
- 案例0的analog范围是
1500*0.92=1380到1500*1.08=1620,1420落在区间内; - 温度范围是
22-2=20到22+2=24,20刚好符合要求; - 因此该行匹配到case=0。
批量优化建议(针对300行案例)
如果你的案例表有300行,上述循环已经足够高效,若要进一步优化可以用广播机制减少循环,但对于300行的规模,循环的性能差异可以忽略。如果存在多个案例匹配同一传感器行的情况,你需要额外添加逻辑(比如优先匹配范围最接近的案例)。
内容的提问来源于stack exchange,提问作者Brell
相关产品推荐
相关产品推荐

