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

如何使用Pandas合并两个DataFrame并匹配关联kingdom字段?

如何合并两个Pandas DataFrame并补充缺失的kingdom列?

嘿,我来帮你搞定这个Pandas数据合并的需求!首先咱们先把你提供的两个原始DataFrame梳理清楚,然后一步步实现你想要的目标结果。

第一步:明确原始DataFrame结构

先把你给出的两个DataFrame用代码正确构造出来(修正了排版混乱问题,确保列与行数据对应):

第一个DataFrame(包含kingdom列)

import pandas as pd

df1 = pd.DataFrame({
    'seq1_id': [45, 34, 32, 32],
    'seq2_id': [56, 43, 34, 12],
    'dN': [23, 34, 21, 35],
    'dS': [455, 453, 90, 211],
    'Dist1': [10, 15, 5, 3],
    'Dist_brute': [20, 25, 8, 6],
    'kingdom': ['eucaryota', 'procaryota', 'Virus', 'Virus'],
    'seq1': ['seq6', 'seq3', 'seq21', 'seqXX'],
    'seq2': ['seq9', 'seq98', 'seq87', 'seqYY']
})

第二个DataFrame(无kingdom列)

df2 = pd.DataFrame({
    'seq1_id': [45, 78, 32, 32, 21, 34],
    'seq2_id': [56, 45, 34, 12, 23, 43],
    'dN': [23, 45, 21, 35, 23, 34],
    'dS': [455, 789, 90, 211, 123, 453],
    'Dist1': [10, 32, 5, 3, 12, 34],
    'Dist_brute': [20, 789, 8, 6, 123, 453],
    'seq1': ['seq4', 'seq3', 'seq21', 'seq45', 'seq6', 'seq3'],
    'seq2': ['seq12', 'seq98', 'seq87', 'seq90', 'seq9', 'seq98']
})

解决方案:使用Pandas的merge方法

核心思路是用**右连接(right join)保留第二个DataFrame的所有行,同时将第一个DataFrame中匹配行的kingdom值填充进去,不匹配的行自动填充NaN。如果需要保留两个DataFrame的所有行,换成全外连接(outer join)**即可。

完整实现代码

# 合并两个DataFrame:用seq1和seq2作为匹配键,右连接保留df2的所有行
merged_df = pd.merge(df1, df2, on=['seq1', 'seq2'], how='right', suffixes=('_df1', '_df2'))

# 合并重复列:优先保留df2的数值(符合目标结果以df2行为基础的需求)
for col in ['seq1_id', 'seq2_id', 'dN', 'dS', 'Dist1', 'Dist_brute']:
    merged_df[col] = merged_df[f'{col}_df2'].fillna(merged_df[f'{col}_df1'])
    merged_df.drop([f'{col}_df1', f'{col}_df2'], axis=1, inplace=True)

# 调整列顺序,与目标DataFrame一致
merged_df = merged_df[['seq1_id', 'seq2_id', 'dN', 'dS', 'Dist1', 'Dist_brute', 'kingdom', 'seq1', 'seq2']]

# 查看最终结果
print(merged_df)

代码逻辑解释

  1. 合并数据:how='right'确保保留df2的所有行,通过on=['seq1', 'seq2']指定匹配的唯一标识列,把df1的kingdom列对应到匹配行,无匹配时kingdom自动为NaN。
  2. 处理重复列:合并后相同列会生成带后缀的副本,这里优先取df2的数值(符合你目标结果的行数据要求),然后删除多余的后缀列。
  3. 调整列顺序:将列排列成你目标DataFrame的顺序,保证输出结构完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:55