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

Python如何对比行值与阈值判断设备运行周期并统计总周期数

Pandas设备开机周期统计实现方案

核心思路

我们通过连续值分组、有效区间过滤、噪声修正三步实现需求,完全匹配给定的判定规则:

  • 识别原始0/1状态列的连续值分组
  • 筛选出连续1长度≥6的分组作为有效开机区间
  • 将有效开机区间内的所有值(包括夹杂的错误0)统一修正为1,其余位置为0得到去噪状态列
  • 统计去噪列中0跳转到1的次数,即为总运行周期数

完整代码实现

import pandas as pd

# 可替换为自己读取CSV、生成Machine On/Off列的业务逻辑
# 以下为测试用示例数据
Machine = [0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0]
df = pd.DataFrame(Machine, columns=['Machine On/Off'])

# 步骤1:给每个连续相同值的块分配唯一分组ID
df['group_id'] = (df['Machine On/Off'] != df['Machine On/Off'].shift()).cumsum()

# 步骤2:计算每个分组的取值和长度
group_info = df.groupby('group_id').agg(
    val=('Machine On/Off', 'first'),
    count=('Machine On/Off', 'count')
).reset_index()

# 步骤3:筛选有效开机分组(值为1且连续长度≥6)
valid_groups = group_info[(group_info['val'] == 1) & (group_info['count'] >= 6)]['group_id'].tolist()

# 步骤4:生成去噪后的开机状态列
df['clean_status'] = df['group_id'].isin(valid_groups).astype(int)

# 步骤5:统计总运行周期数(统计0跳转为1的次数)
total_cycles = ((df['clean_status'] == 1) & (df['clean_status'].shift(1) == 0)).sum()

print(f"设备总运行周期数:{total_cycles}")

结果说明

用提供的测试数据运行以上代码,输出结果为3,和预期的实际开机周期数完全匹配。2万行规模的数据可在毫秒级完成计算,无性能问题。

前期数据处理适配

如果需要补充压力值计算、阈值判定的逻辑,可参考以下代码:

# 读取CSV数据
df = pd.read_csv("你的设备数据路径.csv")
# 5窗口滑动平均计算
df['滑动平均'] = df['压力值'].rolling(5, min_periods=1).mean()
# 5窗口滑动中心平均计算
df['滑动中心平均'] = df['压力值'].rolling(5, center=True, min_periods=1).mean()
# 生成原始Machine On/Off列
df['Machine On/Off'] = (df['滑动平均'] >= 115).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:45:04