将布尔值组合到输入和触发器中的布尔运算
Boolean operation to combine the booleans in an input and a trigger
这是一些带有“输入”列和“触发”列的示例数据。 “输入”列通常为 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)
您可以使用触发器列创建组,然后拆分并回填输入。
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
注意。这并没有考虑到由于预期行为不明确而在一段时间内触发的情况
这是一些带有“输入”列和“触发”列的示例数据。 “输入”列通常为 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)
您可以使用触发器列创建组,然后拆分并回填输入。
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
注意。这并没有考虑到由于预期行为不明确而在一段时间内触发的情况