Pandas中判断DataFrame列A的True是否为列B上次True后的首次出现
Pandas高效实现方案
核心逻辑是通过B列的累计值划分区间,每个区间内仅标记A列的第一个True为有效结果,全程使用向量化操作,无循环,处理百万行级数据也可在毫秒级完成。
实现代码
import pandas as pd # 生成B列的分组ID:每次B出现True时分组ID+1,代表B上次True后的区间 group_id = df['B'].cumsum() # 三个判断条件同时满足才标记为True: # 1. A列当前值为True # 2. 已经出现过至少一次B的True(group_id>0,排除初始无B True的区间) # 3. 当前是本分组内A的第一个True df['C'] = df['A'] & (group_id > 0) & (~df['A'].groupby(group_id).cumsum().gt(1))
验证示例
示例1测试
输入数据:
df = pd.DataFrame({ 'A': [False, False, True, False, True, False, True, False, True], 'B': [True, False, False, False, False, True, False, False, False] })
运行代码后输出的df['C']值为[False, False, True, False, False, False, True, False, False],和预期结果完全一致。
示例2测试
输入数据:
df = pd.DataFrame({ 'A': [True, False, False, True, False, True, False, True, False], 'B': [False, True, False, False, False, False, True, False, False] })
运行代码后输出的df['C']值为[False, False, False, True, False, False, False, True, False],和预期结果完全一致。
内容的提问来源于stack exchange,提问作者supermodo
相关产品推荐
相关产品推荐

