Python中合并含相同键同列异值的DataFrame(保留全量ID)
Pandas DataFrame 合并:以df2为准更新Name字段
原始数据
我们有两个DataFrame:
- df1包含全部ID,部分Name字段为空:
import pandas as pd df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04', 'A05', 'A06','A07'], 'Name': ['', '', '', '', 'MKI', 'OPU','']})
- df2包含部分ID,对应Name值与df1可能不同:
df2 = pd.DataFrame({'id': ['A01', 'A05', 'A06', 'A03'], 'Name': ['ABC', 'TUV', 'MNO', 'JKL']})
需求
保留df1的全部ID,以df2为基准更新Name字段:
- 若df1中Name为空,用df2的对应值替换
- 若两者Name均有值,优先使用df2的值
解决方案
通过左连接合并两个DataFrame,然后按优先级生成新的Name字段:
# 左连接合并,保留df1所有ID merged = df1.merge(df2, on='id', how='left', suffixes=('_df1', '_df2')) # 优先取df2的Name,无对应值则保留df1的Name merged['Name'] = merged['Name_df2'].fillna(merged['Name_df1']) # 提取目标列得到最终结果 df3 = merged[['id', 'Name']].reset_index(drop=True) # 输出结果 print(df3)
最终结果
执行后得到的df3如下:
id Name 0 A01 ABC 1 A02 2 A03 JKL 3 A04 4 A05 TUV 5 A06 MNO 6 A07
内容的提问来源于stack exchange,提问作者ZAVERI SIR
相关产品推荐
相关产品推荐

