【问题标题】:Boolean operation to combine the booleans in an input and a trigger将输入和触发器中的布尔值组合起来的布尔运算
【发布时间】:2022-01-26 14:17:54
【问题描述】:

这是一些带有“输入”列和“触发”列的示例数据。 “输入”列通常为 False,但具有 True 段(例如,样本数据中有一个 True 段)。我正在尝试创建第三列(“输出”),它是“输入”列的修改版本。本质上,“输出”中的 True 段应该早于“输入”开始,如“触发器”所示(由“触发器”的前一个 True 值)。我想通过向量操作来实现这一点,并且我想避免循环,例如为。

index = pd.date_range('2020-01-01', '2020-01-13', freq='D')
columns = ['Input', 'Trigger']
data = [[False, False],
        [False, False],
        [False, True],
        [False, False],
        [False, False],
        [False, True],
        [False, False],
        [False, False],
        [True, False],
        [True, False],
        [True, False],
        [True, False],
        [False, False]
       ]
pd.DataFrame(data, index, columns)

我不知道如何实现我的目的,但我提供的示例数据的结果如下所示:

columns = ['Input', 'Trigger', 'Output']
data = [[False, False, False],
        [False, False, False],
        [False, True, False],
        [False, False, False],
        [False, False, False],
        [False, True, True],
        [False, False, True],
        [False, False, True],
        [True, False, True],
        [True, False, True],
        [True, False, True],
        [True, False, True],
        [False, False, False]
       ]
pd.DataFrame(data, index, columns)

【问题讨论】:

  • 我不确定你可以向量化这个操作。
  • 我不遵循逻辑。第三行的“输出”不应该是True吗?
  • 输入中是否只有一段 True?在输入拉伸之后(或期间),触发器中是否存在 True?那么应该怎么办呢?
  • 为什么第三行的“触发器”被忽略了?为什么最后一行是假的?想象一下,除了您明确告诉我们的内容外,我们对您正在尝试做的事情一无所知。
  • @mozway:如果在 Input 的 True 拉伸内 Trigger 中有 True,我们将忽略它。据我所知,这就是您的解决方案正在做的事情。谢谢,太棒了!

标签: python pandas boolean conditional-statements boolean-expression


【解决方案1】:

您可以使用触发器列创建组,然后拆分和回填输入。

df['Output'] = (
 df['Input']
 .replace({False: None})
 .groupby(df['Trigger'].cumsum()).bfill()  # backfill previous NA in group
 .fillna(False)
)

输出:

            Input  Trigger  Output
2020-01-01  False    False   False
2020-01-02  False    False   False
2020-01-03  False     True   False
2020-01-04  False    False   False
2020-01-05  False    False   False
2020-01-06  False     True    True
2020-01-07  False    False    True
2020-01-08  False    False    True
2020-01-09   True    False    True
2020-01-10   True    False    True
2020-01-11   True    False    True
2020-01-12   True    False    True
2020-01-13  False    False   False

注意。这并没有考虑到由于预期行为不清楚而在一段时间内触发的情况

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2017-01-09
    • 2020-08-22
    • 2011-09-27
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多