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

递归剔除传感器数据异常值并重新计算均值的实现问询

递归剔除传感器数据中偏离均值3%的异常值解决方案

针对你需要反复剔除偏离均值3%的传感器数据、直到无异常值剩余的需求,这里提供一个基于循环(替代递归,更易控制终止条件)的实现方案,既满足迭代筛选的逻辑,又能保留原始数据行不被删除:

核心逻辑

对每行数据重复以下步骤,直到没有新的异常值被剔除或剩余有效数据不足2个(此时均值无参考意义无需继续):

  • 基于当前有效数据计算均值
  • 筛选出与当前均值偏差≤3%的数据作为新的有效数据
  • 若新有效数据和上一轮完全一致,终止迭代

代码实现

import pandas as pd

# 定义处理单行数据的迭代剔除函数
def iterative_outlier_removal(row, threshold=0.03):
    # 初始时所有数据都有效,先排除空值(如果存在)
    valid_values = row.dropna().values
    if len(valid_values) <= 1:
        return valid_values.mean() if len(valid_values) > 0 else pd.NA
    
    while True:
        current_mean = valid_values.mean()
        # 计算每个值与均值的相对偏差
        deviations = abs((valid_values - current_mean) / current_mean)
        # 筛选符合偏差要求的数据
        new_valid = valid_values[deviations <= threshold]
        
        # 终止条件:无数据被剔除,或剩余有效数据不足2个
        if len(new_valid) == len(valid_values) or len(new_valid) <= 1:
            break
        valid_values = new_valid
    
    return valid_values.mean()

# 示例数据(替换为你的实际DataFrame)
data = {
    'PCU_1': [777.742, 836.361, 727.017, 605.709, 110.978, 711.227, 876.883, 951.960, 611.169, 967.444],
    'PCU_2': [718.338, 903.235, 724.114, 659.761, 109.853, 717.215, 907.998, 952.145, 662.214, 982.002],
    'PCU_3': [742.445, 879.436, 793.942, 640.930, 106.536, 807.651, 856.678, 997.779, 710.009, 990.523],
    'PCU_4': [747.016, 978.934, 775.843, 698.307, 104.108, 768.889, 868.977, 993.696, 872.859, 993.374]
}
df = pd.DataFrame(data, index=range(50,60))

# 指定传感器列
irrad_cols = ['PCU_1', 'PCU_2', 'PCU_3', 'PCU_4']

# 应用函数计算最终均值
df['Final Mean Irradiance'] = df[irrad_cols].apply(iterative_outlier_removal, axis=1)

print(df)

代码说明

  1. iterative_outlier_removal函数:针对单行数据执行迭代筛选逻辑,用循环替代递归(避免递归深度溢出问题),明确终止条件防止无限循环。
  2. 保留原始数据:所有原始传感器列完整保留,仅新增最终均值列,完全符合"不删除整行"的要求。
  3. 边界处理:自动排除空值,同时在剩余有效数据不足2个时停止迭代,避免无意义计算。
  4. 兼容现有代码:可以直接替换你现有单次剔除的逻辑,无缝集成到原有数据处理流程中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:03:19