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

如何基于公共键合并DataFrame:补充列并保留新增行

解决DataFrame合并需求的方法

你需要的是全外连接(full outer join),通过pandas.merge()方法即可实现,指定how='outer'并以host作为连接键就能满足你的要求:

代码示例

import pandas as pd

# 构造示例数据
df_a = pd.DataFrame({
    'host': ['aa', 'bb', 'cc'],
    'val1': [11, 22, 33],
    'val2': [44, 55, 66]
})

df_b = pd.DataFrame({
    'host': ['aa', 'bb', 'dd'],
    'val1': [11, 22, 0],
    'val3': [77, 88, 99]
})

# 执行全外连接合并
merged_df = pd.merge(df_a, df_b, on='host', how='outer')

# 合并重复的val1列(优先保留df_a的值,无值时用df_b补充)
merged_df['val1'] = merged_df['val1_x'].combine_first(merged_df['val1_y'])
merged_df = merged_df.drop(columns=['val1_x', 'val1_y'])

# 调整列顺序以匹配预期结果
merged_df = merged_df[['host', 'val1', 'val2', 'val3']]

print(merged_df)

输出结果

host  val1  val2  val3
0   aa    11  44.0   77.0
1   bb    22  55.0   88.0
2   cc    33  66.0   NaN
3   dd     0   NaN  99.0

关键说明

  • how='outer':保留两个DataFrame的所有行,无匹配的行用NaN填充缺失值
  • on='host':指定host作为连接的公共键
  • combine_first:当val1列在两个DataFrame中有差异时,优先取df_a的值,再用df_b的值补充;若值一致则直接合并

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:55:05