合并两个大型pandas DataFrame并解决重复匹配行膨胀问题
解决方案
问题核心是post中存在重复ID,直接合并会产生笛卡尔积导致行数爆炸。需要先对post按ID去重,再与pre合并。
步骤1:清洗post数据,保留每个ID的目标记录
观察示例数据,期望输出取的是每个ID在post中第一次出现的Allele和Score,因此用drop_duplicates按ID去重:
# 对post按ID去重,保留每组第一条记录 post_clean = post.drop_duplicates(subset='ID', keep='first')
如果实际业务需要按其他规则筛选(比如保留每组Score最大值对应的记录),可以用分组聚合实现:
# 示例:按ID分组,保留Score最大的那条记录 post_clean = post.loc[post.groupby('ID')['Score'].idxmax()]
步骤2:合并清洗后的post_clean与pre
因为期望输出行数与pre一致(16448行),使用左连接确保pre的所有记录都被保留:
total = pre.merge(post_clean, on='ID', how='left')
示例数据验证
运行上述代码后,示例数据输出与期望完全匹配:
print(total) # 输出: # ID Location infer Allele Score # 0 NM001.1:c.05C>T 5.1 Path T 1 # 1 NM002.1:c.05C>T 7.2 Ben T 7 # 2 NM004.1:c.05T>C 3.1 Path C 9
此时total.shape为(3,5),符合预期。
真实数据适配
直接将上述代码应用到真实数据即可,最终total的shape会是(16448, 760),与需求一致。
内容的提问来源于stack exchange,提问作者Luffy
相关产品推荐
相关产品推荐

