gpt4 book ai didi

python - 通过比较两列来跟踪 Pandas 中的状态反转

转载 作者:行者123 更新时间:2023-12-01 06:42:10 25 4
gpt4 key购买 nike

这是我上一个问题的后续问题:detecting value crossing between columns in Pandas

假设我有两列,df['a']df['b'],此处称为“a”和“b”以简化

在上一个问题中,我试图检测以下索引:a[i - 1] < b[i] 和 a[i] >= b[i]

现在,我正在尝试跟踪两个更改:

a[i - 1] < b[i] and a[i] >= b[i]

a[i - 1] >= b[i] and a[i] < b[i]

并创建一个列,其中的值基于上次发生的更改设置。

这是一些伪代码:

state = 0
result = []
for i in myIndex:
if a[i - 1] < b[i] and a[i] >= b[i]:
state = 1
elif a[i - 1] >= b[i] and a[i] < b[i]:
state = 0

result.append(state)

是否有一种惯用的(非循环)方法可以在 Pandas 中实现此目的?

<小时/>

编辑:

我意识到这个问题引起了一些困惑,所以我没有正确地表达它。这里是一个例子:

假设我有两列用于我跟踪的两个条件的输出:

 cond_A    cond_B
false false
false true
false false
false false
true false
false false

那么输出应该是(如果我们将 0 和 1 设置为输出值):

cond_A    cond_B    output
false false 0
false true 1
false false 1
false false 1
true false 0
false false 0

所以,如果两个条件都为假,我们重用最后一个状态,如果一个条件为真,我们设置状态。

最佳答案

这是 RS 触发器的方程:https://en.wikipedia.org/wiki/Flip-flop_(electronics)

使用作为数据框给出的示例:

print(df)

cond_A cond_B
0 False False
1 False True
2 False False
3 False False
4 True False
5 False False
<小时/>

更新

df['state']=df.any(axis=1).where(df['cond_B'].cumsum().ge(1),0).cumsum()%2
print(df)


cond_A cond_B state
0 False False 0
1 False True 1
2 False False 1
3 False False 1
4 True False 0
5 False False 0
<小时/>

如果您有两个独立的系列

(cond_A | cond_B).where(cond_B.cumsum().ge(1),0).cumsum()%2

关于python - 通过比较两列来跟踪 Pandas 中的状态反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59400530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com