MATLAB中基于C1列状态生成C2列持续标记的逻辑实现问题
问题解决方法
你的现有代码仅对C1值为1和-1的行单独赋值,没有处理两次切换点中间C1为0的行,你可以通过状态标记的逻辑实现需求:
核心逻辑
维护一个全局状态变量记录当前C2应该保持的值:
- 初始状态为0
- 遍历到C1=1时,状态切换为1
- 遍历到C1=-1时,状态切换为0
- 每一行的C2直接取当前状态值即可
代码示例
MATLAB 实现
state = 0; row_num = length(C1); C2 = zeros(row_num, 1); for i = 1:row_num if C1(i) == 1 state = 1; elseif C1(i) == -1 state = 0; end C2(i) = state; end
Python Pandas 实现
遍历实现(逻辑清晰易理解)
import pandas as pd state = 0 c2_res = [] for c1_val in df["C1"]: if c1_val == 1: state = 1 elif c1_val == -1: state = 0 c2_res.append(state) df["C2"] = c2_res
向量化实现(无需循环,适合大数据量)
# 将C1中的0替换为空值后向前填充,填充值为1时C2取1,否则取0 df["C2"] = df["C1"].replace(0, pd.NA).ffill().fillna(0).eq(1).astype(int)
内容的提问来源于stack exchange,提问作者daveskis
相关产品推荐
相关产品推荐

