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

合并两个大型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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:35:41