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
相关产品推荐
相关产品推荐

