如何基于公共键合并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
相关产品推荐
相关产品推荐

