如何根据数据框中的条件将逻辑从(True到False)或(False到True)更改



我想根据另一列的条件触发包含布尔值的列。这个想法是确定安全区域(或不)采取行动

例如…基于"Check"中的条件,如果为真,则更改"Skip">

中的逻辑
df_ohlcv["Check"] = ...Condition...
df_ohlcv["Skip"] = df_ohlcv["Skip"].where(~df_ohlcv["Check"], ~df_ohlcv["Skip"])

上面的代码我得到了KeyError: 'Skip'。我猜是因为"Skip"在使用之前没有初始化。如果我分配一些值(例如False),那么'Skip'不能保持以前的逻辑(卡在False)

我希望得到如下结果

<表类>检查跳过tbody><<tr>假假假假假假真正对假对假对假对真正假假假假假假假真正对假对假对
df["Skip"] = df["Check"].cumsum().mod(2).astype(bool)
  • 取True/False"检查"的累计和;列
    • 因为True == 1和False == 0,这将决定组为0,1,2,3…
  • 对组取模2,使其减小为0,1,0,1…
  • 然后为0 ->False, 1 ->真正的映射

,

>>> df
Check   Skip
0   False  False
1   False  False
2   False  False
3    True   True
4   False   True
5   False   True
6   False   True
7    True  False
8   False  False
9   False  False
10  False  False
11   True   True
12  False   True
13  False   True

如果我没看错你:

import numpy as np
df_ohlcv["Skip"] = np.where(df_ohlcv["Check"], (1-df_ohlcv["Skip"]).astype(bool), df_ohlcv["Skip"])

这将把'skip'更改为'check'为True的每一行的相反值

最新更新