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

Pandas删除任意3列相同重复行的更优实现方法咨询

Pandas 删除任意3列重复行的优化实现

你原有逻辑是成立的,可以通过以下两种方式优化得更简洁高效:

方案1:原有逻辑的简化版

用itertools.combinations自动生成所有3列的组合,不用手动声明4次去重逻辑,同时替换已被pandas废弃的append方法为官方推荐的pd.concat,后续如果调整校验列、或者修改重复判断的列数,只要改参数即可,维护成本更低:

from itertools import combinations
import pandas as pd

check_cols = ['col1', 'col2', 'col3', 'col4']
# 生成所有3个列的组合,共C(4,3)=4组
three_col_combs = combinations(check_cols, 3)

data_without_duplicates = pd.concat(
    [data_between_all.drop_duplicates(subset=comb) for comb in three_col_combs]
).drop_duplicates()

方案2:大表友好的高效实现

如果你的数据量很大,方案1拼接多份子DataFrame会占用额外内存,可以直接在原表上做重复标记,只筛选符合保留规则的行,内存开销低、处理速度更快:

from itertools import combinations
import pandas as pd

check_cols = ['col1', 'col2', 'col3', 'col4']
three_col_combs = combinations(check_cols, 3)
# 初始化保留标记:所有行默认保留
keep_flag = pd.Series([True]*len(data_between_all), index=data_between_all.index)

for comb in three_col_combs:
    # 任意3列组合下重复的非首条行,标记为删除
    keep_flag &= ~data_between_all.duplicated(subset=comb)

data_without_duplicates = data_between_all[keep_flag].copy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:03