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

Pandas多条件if语句实现:识别机器连续运行区间并计算压力均值

完整实现代码

你已有的基础逻辑不需要改动,先修正find_runs函数里的笔误:把raise Valueerror改成raise ValueError(大小写错误),之后在run = find_runs(arr)之后补充以下逻辑即可:

# 拆分运行序列识别结果
run_values, run_starts, run_lengths = find_runs(arr)

# 存储符合条件的运行周期统计结果
valid_cycles = []

# 遍历所有识别到的连续序列
for val, start, length in zip(run_values, run_starts, run_lengths):
    # 筛选 标记为开启 且 连续行数超过3的周期
    if val == '1' and length > 3:
        # 截取当前周期对应的数据段
        cycle_df = df.iloc[start : start + length]
        # 计算平均压力
        avg_pressure = cycle_df['Pressure'].mean()
        # 保存周期信息:起始行索引、周期长度、平均压力、起始时间、结束时间
        valid_cycles.append({
            'start_index': start,
            'cycle_length': length,
            'avg_pressure': round(avg_pressure, 2),
            'start_time': cycle_df['Date/Time'].iloc[0],
            'end_time': cycle_df['Date/Time'].iloc[-1]
        })

# 统计结果输出
total_on_count = len(valid_cycles)
print(f"符合条件的机器总开启次数:{total_on_count}")
print("各开启周期平均压力:")
for idx, cycle in enumerate(valid_cycles, 1):
    print(f"第{idx}个周期:平均压力{cycle['avg_pressure']},持续{cycle['cycle_length']}行,时间范围{cycle['start_time']} ~ {cycle['end_time']}")

# 如果需要把结果转成DataFrame导出可以加这行
result_df = pd.DataFrame(valid_cycles)
result_df.to_csv('machine_cycle_stats.csv', index=False)

说明

  • 你之前代码末尾写的df.iloc[_start:run_length]是错误用法,iloc的右边界是「起始索引+周期长度」,不是直接用周期长度
  • 如果需要统计所有开启次数(包含连续行数≤3的),只需要把筛选条件里的and length >3去掉,单独计数即可
  • 当前Machine On/Off列存的是字符串类型的'1'/'0',如果后续改成数值类型,只需要把判断条件里的val == '1'改成val == 1即可

内容的提问来源于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 08:54:04