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

如何基于DateTime条件实现传感器读数超10分钟低于阈值的故障检测

传感器读数故障检测代码完善方案

需求梳理

  • 标记所有低于550的传感器读数
  • 当sensor_1读数持续低于550超过10分钟时,打印对应记录的filename列值
  • DateTime字段每秒生成8条传感器数据

完善后的代码

import pandas as pd

# 先确保DateTime列是datetime类型,否则无法计算时间差
df['DateTime'] = pd.to_datetime(df['DateTime'])

# 按filename分组,逐个处理每个文件的传感器数据
for filename, group_df in df.groupby('filename'):
    # 标记所有低于550的sensor_1读数
    group_df['is_low'] = group_df['sensor_1'] < 550
    
    # 用累计求和的方式,把连续的低读数划分为同一个分组
    group_df['low_group'] = (~group_df['is_low']).cumsum()
    
    # 筛选出所有低读数的分组,逐个判断持续时间
    low_groups = group_df[group_df['is_low']].groupby('low_group')
    for _, low_segment in low_groups:
        # 计算该段低读数的时间跨度
        duration = low_segment['DateTime'].max() - low_segment['DateTime'].min()
        # 判断是否超过10分钟(600秒)
        if duration.total_seconds() > 600:
            print(filename)
            break  # 同一个文件只要有一次符合条件就停止判断,避免重复打印

代码说明

  1. 类型转换:将DateTime转为datetime类型,保证时间差计算的准确性
  2. 低读数标记:新增is_low列,直观标记所有sensor_1低于阈值的记录
  3. 连续区间分组:通过反向标记的累计求和,自动划分出连续的低读数区间
  4. 时长判断:对每个连续低读数区间计算首尾时间差,超过10分钟则输出对应文件名
  5. 按文件独立检测:通过groupby('filename')确保每个文件的检测逻辑独立,不会跨文件误判

如果你的df是多个DataFrame组成的列表(比如从多个文件读取的数据集),可以改用以下写法:

import pandas as pd

for dataframe in df_list:
    dataframe['DateTime'] = pd.to_datetime(dataframe['DateTime'])
    dataframe['is_low'] = dataframe['sensor_1'] < 550
    dataframe['low_group'] = (~dataframe['is_low']).cumsum()
    
    low_groups = dataframe[dataframe['is_low']].groupby('low_group')
    for _, low_segment in low_groups:
        duration = low_segment['DateTime'].max() - low_segment['DateTime'].min()
        if duration.total_seconds() > 600:
            print(dataframe['filename'].iloc[0])
            break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:52:11