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

如何用Python Pandas根据VALUE列生成机器运行模式statusA/B列?

解决方案:用Pandas结合状态机生成运行模式列

问题规则回顾

  1. 初始模式为A
  2. 切换到模式B的条件:连续3个时间步的VALUE≥5(即连续3个on状态)
  3. 进入模式B后:
    • 只要后续VALUE≥5(on状态),保持模式B
    • 若出现VALUE<5(down状态),需连续3个down时间步后才切换回A;期间若再次出现on,重置down计数并保持B

实现代码

import pandas as pd

# 1. 创建示例数据(可替换为你的实际DataFrame)
data = {
    'time': ['00:00', '00:01', '00:02', '00:03', '00:04', '00:05', '00:06', '00:07', '00:08', '00:08', '00:09', '00:10', '00:11', '00:12', '00:13', '00:14', '00:15', '00:16', '00:17', '00:18', '00:19', '00:20', '00:21', '00:22', '00:23', '00:24', '00:25'],
    'VALUE': [0,0,0,8,4,2,1,2,1,5,6,0,10,10,10,11,2,1,3,11,10,10,10,10,11,14,11]
}
df = pd.DataFrame(data)

# 2. 定义状态机逻辑函数
def update_status(row, prev_state, consecutive_on, down_count):
    current_is_on = row['VALUE'] >= 5
    
    if prev_state == 'A':
        # 更新连续on次数:当前是on则累加,否则重置为0
        consecutive_on = consecutive_on + 1 if current_is_on else 0
        # 连续on满3次则切换到B
        if consecutive_on >= 3:
            new_state = 'B'
            down_count = 0
        else:
            new_state = 'A'
    else: # 处于B状态
        if current_is_on:
            # 当前是on,保持B并重置down计数
            new_state = 'B'
            consecutive_on += 1
            down_count = 0
        else:
            # 当前是down,累加down计数
            down_count += 1
            # 连续down满3次则切回A,否则保持B
            new_state = 'A' if down_count >= 3 else 'B'
            # 切回A时重置连续on计数
            if new_state == 'A':
                consecutive_on = 0
    
    return new_state, consecutive_on, down_count

# 3. 初始化状态变量并遍历DataFrame生成结果
prev_state = 'A'
consecutive_on = 0
down_count = 0
status_list = []

for _, row in df.iterrows():
    new_state, consecutive_on, down_count = update_status(row, prev_state, consecutive_on, down_count)
    status_list.append(new_state)
    prev_state = new_state

# 4. 将结果添加到DataFrame,并生成on/down状态列
df['status_on_down'] = df['VALUE'].apply(lambda x: 'on' if x >=5 else 'down')
df['statusA/B'] = status_list

# 查看最终结果
print(df[['time', 'VALUE', 'status_on_down', 'statusA/B']])

代码说明

  • 状态机核心:通过跟踪prev_state(当前模式)、consecutive_on(连续on次数)、down_count(B状态下连续down次数)三个变量,逐行判断模式切换逻辑
  • A状态逻辑:仅在连续3次on时触发切换到B,否则保持A
  • B状态逻辑:on时维持B并重置down计数;down时累加计数,满3次切回A,期间若出现on则重置计数继续保持B

验证结果

运行代码后生成的statusA/B列与示例数据完全匹配,满足所有规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:25:36