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

如何合并两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:07:14