Pandas:在不使用 for 循环的情况下解释链接的布尔条件

Pandas: interpreting linked boolean conditions without using a for loop

提问人:plonfat 提问时间:11/10/2021 最后编辑:plonfat 更新时间:11/10/2021 访问量:27

问:

我想在列停止实现以下结果(基于列价格、限制和强度),而不使用愚蠢的慢速 for 循环。

难点:第一个条件(价格和限价)的开关方向(False to True 或 True to False)会影响其余条件(强度)的解释。

以下是所需结果的屏幕截图,其中包含我的评论和解释:enter image description here

下面是复制上述 DataFrame 的代码:

import pandas as pd

# initialise data of lists.
data = {'price':[1,3,2,5,3,3,4,5,6,5,3],
        'limit':[1.2,3.3,2.1,4.5,3.5,3.8,3,4.5,6.3,4.5,3.5],
        'strength': [False, False, False, False, False, True, True, True, True, False, False],
        'stop': [True, True, True, True, True, True, False, False, False, False, True]}
 
# Create DataFrame
df = pd.DataFrame(data)

非常感谢您的帮助。

pandas 布尔逻辑

评论

1赞 maow 11/10/2021
最后一行有错误吗?4 > 3.5 但你写了价格<限制
0赞 plonfat 11/10/2021
已更正,非常感谢您发现这一点。
0赞 plonfat 11/10/2021
关于如何实现这一目标的任何想法?
1赞 maow 11/10/2021
很遗憾没有。我尝试了 15 分钟左右,但没有得到太多。pandas 有一个函数,允许您使用上一行中的值。但是在您的情况下,您基本上需要考虑所有行,因为 5、10 甚至 100 行可能禁止切换,在这种情况下,您现在需要 6、11 或 101 行前的停止值。除了循环之外,我没有看到任何其他解决方案。当您可以独立处理每一行时,Pandas 真的很强大,但在这里您依赖于之前的所有行。shiftfor

答: 暂无答案