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

Pandas中如何查找含通配符字符串值的重复行

查找含通配值"all"的DataFrame重复行高效方案

需求背景

需要实现一种高效的pandas DataFrame重复行识别逻辑:当某列取值为字符串all时,该值可代表对应列中出现过的所有非all取值,只要两条记录在同一ID分组下、所有字段满足精确匹配或all通配匹配,即判定为重复行。

测试样例

构造测试DataFrame如下:

import pandas as pd
df = pd.DataFrame(
    {
        "ID": ["one", "two", "two", "two", "one"],
        "condition1": ["all", "red", "all", "red", "red"],
        "condition2": ["yellow", "black", "black", "orange", "black"],
    }
)

样例预期判定结果:

  • ID为two的分组存在重复:记录[two, red, black]与[two, all, black]满足匹配规则,condition1列的all可覆盖red取值,两记录condition2取值一致
  • ID为one的分组无重复:两条记录condition2列取值分别为yellow和black,无法通过all通配覆盖,不构成重复

现有实现及问题

当前已实现的方案逻辑为:将所有all取值替换为对应列非all值的集合,对条件列做逐列explode展开后调用duplicated()方法识别重复,代码如下:

df.loc[df.condition1=='all','condition1'] = set(df.condition1)-{'all'}
df.loc[df.condition2=='all','condition2'] = set(df.condition2)-{'all'}
df = df.explode('condition1')
df = df.explode('condition2')
df.duplicated()

该方案存在明显性能缺陷:当条件列的非all取值基数较高、含all的记录占比大时,explode操作会生成体量远超原表的中间DataFrame,内存占用高、运行速度慢,无法适配大规模数据场景。

待探索的优化方向

  • 基于groupby聚合实现匹配逻辑,原生支持all作为全量取值的匹配规则,避免生成大体积中间表
  • 按ID拆分后逐组迭代检查:该方案目前可满足常规使用需求,但仍希望找到更规范、性能更优的实现方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:34