You need to enable JavaScript to run this app. Python Pandas基于多列多条件关联删除同ID所有对应行的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas基于多列多条件关联删除同ID所有对应行的实现问题

Pandas按ID整组筛选实现方案

核心逻辑为以ID为单位做校验:仅当该ID对应的全部行都满足confTyp == 'new'、trType == 'order'、Version == 1三个条件时,才保留该ID下所有条目,否则删除该ID的全部行。


方案1:groupby + filter (中小数据量优先,代码简洁)

直接按ID分组后对全组做校验,符合条件的分组直接保留:

res_df = df.groupby('ID').filter(
    lambda x: ((x['confTyp'] == 'new') 
               & (x['trType'] == 'order') 
               & (x['Version'] == 1)).all()
)

方案2:矢量化校验筛选(大数据量优先,性能更高)

全矢量化操作,避免分组遍历的性能开销,适合百万行以上的数据集:

# 生成单行是否符合条件的掩码
row_mask = (df['confTyp'] == 'new') & (df['trType'] == 'order') & (df['Version'] == 1)
# 按ID分组校验每个ID的所有行是否全部符合要求
id_mask = row_mask.groupby(df['ID']).transform('all')
# 过滤得到最终结果
res_df = df[id_mask]

原df.drop()方案失效原因

直接删除不符合条件的单行,会残留对应ID下原本符合条件的行,无法满足「单条不符合则删除整个ID所有条目」的规则,因此必须先做ID维度的整体校验再过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 19:36:06