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

pandas如何标记每个分组内首个满足指定条件的条目

解决方案

推荐实现(向量化操作,性能最优)

核心逻辑是先筛选出C列等于x的行,再按A分组统计每个分组内符合条件的行的出现顺序,仅将每组第一个符合条件的行标记为1:

import pandas as pd

df = pd.DataFrame(
    {
        "A": ["0", "0", "1", "2", "2", "2"],  
        "B": ["a", "b", "c", "d", "e", "f"], 
        "C": ["y", "x", "y", "x", "y", "x"],
    }
)

# 标记C列等于x的行
c_is_x = df['C'] == 'x'
# 按A分组,统计每组内符合条件的行的序号,仅第一个符合条件的标记为1,其余为0
df['D'] = (c_is_x & (c_is_x.groupby(df['A']).cumcount() == 0)).astype(int)

执行后得到的df['D']和你给出的目标结果完全一致。

兼容原transform写法的调整方案

如果你希望沿用原来的transform+lambda的写法,也可以修改内部逻辑实现筛选,不过该方案在数据量较大时性能不如前者:

df['D'] = df.groupby('A')['C'].transform(
    lambda s: [1 if (val == 'x' and s[:i+1].eq('x').sum() == 1) else 0 for i, val in enumerate(s)]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:39:02