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

如何在Pandas中标记False-False后首次出现的True-False行?

解决Pandas中标记特定条件行的问题

原始数据

先看初始的DataFrame:

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'A': [False, True, False, False, False, False, True, True, False, True],
    'B': [True, False, False, False, True, True, False, False, False, False ]
})

输出结果:

A      B
0  False   True
1   True  False
2  False  False
3  False  False
4  False   True
5  False   True
6   True  False
7   True  False
8  False  False
9   True  False

需求说明

要识别并标记在[False - False]值对之后首次出现的[True - False]行,并在新列中标记符合条件的行。比如示例里:

  • 行3是[False-False],之后首次出现的[True-False]是行6
  • 行8是[False-False],之后首次出现的[True-False]是行9
    这两行就是需要标记的目标行。

解决代码

直接上可行的实现代码,每一步都有注释:

# 1. 定义两个基础掩码:分别标记[False-False]和[True-False]的行
ff_mask = (df['A'] == False) & (df['B'] == False)
tf_mask = (df['A'] == True) & (df['B'] == False)

# 2. 把[False-False]的掩码向后移一位,代表从该行之后开始追踪
ff_shifted = ff_mask.shift(1).fillna(False)

# 3. 用ffill填充,得到每个[False-False]行之后的连续追踪区间
tracking_interval = ff_shifted.ffill()

# 4. 对每个追踪区间,只保留第一个出现的[True-False]行
df['target'] = tf_mask & tracking_interval & ~tf_mask.groupby((~tracking_interval).cumsum()).cumcount().gt(0)

# 查看结果
print(df)

运行结果

新增target列后,符合条件的行会被标记为True:

A      B  target
0  False   True   False
1   True  False   False
2  False  False   False
3  False  False   False
4  False   True   False
5  False   True   False
6   True  False    True
7   True  False   False
8  False  False   False
9   True  False    True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:01:07