如何合并两个DataFrame并通过匹配ID/PID填充SID列?
解决方法
你的问题在于使用了inner类型的merge,这会只保留两个DataFrame匹配的行,并且会合并所有列。要实现用DF2的ServiceId填充DF1的SID列,同时保留DF1原有结构,有两种简单方法:
方法一:使用map直接映射(推荐)
先将DF2转换为以PID为键、ServiceId为值的映射关系,再用DF1的ID列直接填充SID:
# 构建PID到ServiceId的映射字典 service_map = DF2.set_index('PID')['ServiceId'] # 填充DF1的SID列 DF1['SID'] = DF1['ID'].map(service_map)
处理后DF1会直接变成目标结构,不匹配的行(比如mark的A4)的SID会保持空值。
方法二:使用merge并筛选列
如果想用merge实现,需要用left连接(保留DF1所有行),再整理列的内容:
# 只选择DF2中需要的列做左连接 merged_df = DF1.merge(DF2[['PID', 'ServiceId']], how='left', left_on='ID', right_on='PID') # 将ServiceId的值赋值给SID列 merged_df['SID'] = merged_df['ServiceId'] # 删除多余的列 DF3 = merged_df.drop(['PID', 'ServiceId'], axis=1)
你之前代码的问题
how='inner'会过滤掉DF1中无匹配的行(比如mark的A4),不符合保留原结构的需求- merge默认会合并两个DataFrame的所有列,导致结果包含Address、Active等多余字段
内容的提问来源于stack exchange,提问作者Ullan
相关产品推荐
相关产品推荐

