如何在Python Pandas中基于Accession Number合并三个DataFrame?
基于Accession Number合并DataFrame的解决方案
核心逻辑
以DF1的Accession Number为基准,通过两次左连接实现需求:
- 保留DF1所有行,无匹配的Accession对应列自动填充
NaN - 若DF2/DF3存在重复Accession,DF1对应行自动重复以匹配这些重复项
代码实现
import pandas as pd # 第一步:合并DF1与DF2,保留DF2的重复匹配项 merged_df1_df2 = pd.merge(DF1, DF2, on='Accession Number', how='left') # 第二步:将合并结果与DF3再次合并,保留DF3的重复匹配项 final_result = pd.merge(merged_df1_df2, DF3, on='Accession Number', how='left')
关键说明
- 左连接的作用:
how='left'参数确保DF1的34376条记录全部保留,DF2/DF3中无匹配的Accession对应的额外列会自动填充NaN(即你说的Null)。 - 处理重复Accession:当DF2/DF3中存在同一Accession的多条记录时,merge操作会自动复制DF1中对应的行,与这些重复记录一一匹配,满足“DF1对应行需重复”的要求。
- 列数说明:最终结果包含DF1的13列、DF2的27个额外列(排除共同的Accession Number)、DF3的13个额外列,总列数为53列;行数则根据DF2/DF3的重复情况有所增加。
额外提示
- 先确认三个DataFrame的
Accession Number列数据类型一致(比如统一为字符串),避免因类型不匹配导致匹配失败。 - 若需要替换
NaN,可使用fillna()方法,例如:# 用0填充所有空值,可根据需求调整填充值 final_result.fillna(0, inplace=True)
内容的提问来源于stack exchange,提问作者Manas Jadhav
相关产品推荐
相关产品推荐

