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

如何在Pandas DataFrame中实现:仅保留Combined_Decision首次为TRUE的记录,后续TRUE需忽略直至Decision_A出现新的TRUE

解决思路和代码实现

这个需求核心是要按Decision_A的True值划分数据块,然后在每个块里只保留Combined_Decision首次出现的True记录。我之前处理过类似的分组过滤场景,用Pandas的groupby结合累积统计就能轻松实现,下面一步步来:

1. 先准备示例数据(方便你测试)

先构造一个和你场景匹配的DataFrame,包含各种边界情况:

import pandas as pd

data = {
    "Decision_A": [False, False, True, False, False, True, False, False, False],
    "Combined_Decision": [True, False, False, True, True, False, True, False, True]
}
df = pd.DataFrame(data)

2. 生成分组键

我们需要把数据分割成一个个以Decision_A == True为分界的连续组。利用布尔值转整数后累加的特性,用cumsum()生成分组标识:

df["group_id"] = df["Decision_A"].cumsum()

这样,每次遇到Decision_A == True,group_id就会加1,把后续的行归为新的分组。

3. 标记需要保留的行

在每个分组内,我们只保留Combined_Decision == True的首次出现。可以用groupby结合transform,通过累积计数判断是否是首次出现:

df["keep_row"] = df.groupby("group_id")["Combined_Decision"].transform(
    lambda x: x.cumsum() == 1
)

这里x.cumsum()会统计每个分组内Combined_Decision的True出现次数,当次数等于1时,就是该组内的首次True,标记为True。

4. 过滤得到结果

最后筛选出标记为keep_row == True的行,再去掉临时列即可:

result_df = df[df["keep_row"]].drop(columns=["group_id", "keep_row"])

如果你的需求是保留所有行,但把分组内非首次的Combined_Decision=True改为False,可以用下面的代码替换步骤3和4:

df["Combined_Decision_filtered"] = df.groupby("group_id")["Combined_Decision"].transform(
    lambda x: x & (x.cumsum() == 1)
)

这样原始的DataFrame会新增一列,只保留每个分组内首次出现的True值。

验证结果

拿示例数据测试的话,最终result_df会包含3行:

  • 第一组(group_id=0)的第1行(Combined_Decision=True)
  • 第二组(group_id=1)的第4行(Combined_Decision=True)
  • 第三组(group_id=2)的第7行(Combined_Decision=True)
    完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:47:36