我想根据另一列的条件触发包含布尔值的列。这个想法是确定安全区域(或不)采取行动
例如…基于"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的每一行的相反值