You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于DataFrame中Check列的条件切换Skip列的布尔值?

解决方案

要实现当Check列值为True时翻转Skip列状态,否则保持上一状态的需求,核心是让Skip列的当前值依赖于历史翻转次数,而非独立计算。以下是两种高效实现方式:

方法一:向量化累积计算(推荐,适合大数据集)

利用cumsum()统计Check列中True的累积次数,通过判断累积次数的奇偶性来确定当前Skip状态:

  • 累积次数为偶数:未翻转/翻转偶数次 → Skip=False
  • 累积次数为奇数:翻转奇数次 → Skip=True

代码示例:

# 假设df_ohlcv已生成Check列
df_ohlcv["Check"] = ... # 你的条件逻辑
# 生成Skip列
df_ohlcv["Skip"] = (df_ohlcv["Check"].cumsum() % 2).astype(bool)

验证你的示例数据:
Check列的累积和依次为0,0,0,1,1,1,1,2,2,2,2,3,3,3,取余2后得到0,0,0,1,1,1,1,0,0,0,0,1,1,1,转布尔值后完全匹配你期望的Skip列结果。

方法二:迭代遍历(适合小数据集)

通过循环逐行更新Skip状态,直观易懂但效率较低:

skip_state = False  # 初始状态
skip_list = []
for check_val in df_ohlcv["Check"]:
    if check_val:
        skip_state = not skip_state
    skip_list.append(skip_state)
df_ohlcv["Skip"] = skip_list

为什么你的原代码失效?

原代码中df_ohlcv["Skip"].where(...)的问题在于:

  1. 未初始化Skip列时会触发KeyError;
  2. 若初始化固定值(如False),向量化操作会基于初始值而非上一行状态翻转,导致无法保留历史状态,最终Skip列只会在初始值和单次翻转值间切换,而非持续继承状态。

内容的提问来源于stack exchange,提问作者Omegaruins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:10:30