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
相关产品推荐
相关产品推荐

