Pandas如何匹配两个不同DataFrame的ID并替换对应Department值
高效实现方案
以下两种都是基于pandas原生矢量化操作的实现,效率远高于自定义循环遍历,适合任意量级的数据处理:
方法1:使用map映射更新(最简洁)
核心逻辑是先将df2转为ID到Department的映射关系,再匹配df1的ID完成更新,未匹配到的ID自动保留原值:
# 构建ID到新部门的映射序列 dept_mapper = df2.set_index('ID')['Department'] # 匹配更新,未匹配到的保留原有Department值 df1['Department'] = df1['ID'].map(dept_mapper).fillna(df1['Department'])
方法2:使用update方法更新(适合多列更新场景)
pandas内置的update方法天生支持仅更新匹配索引的对应值,无需额外判断:
# 临时将ID设为索引用于匹配 df1_idx = df1.set_index('ID') df2_idx = df2.set_index('ID') # 仅更新匹配到的ID对应的Department值,其余数据不改动 df1_idx.update(df2_idx['Department']) # 恢复原始索引结构 df1 = df1_idx.reset_index()
两种方法运行后得到的结果和你给出的预期输出完全一致:匹配到的ID1234、2356的Department会被替换为df2中的对应值,其余行数据保持不变。
内容的提问来源于stack exchange,提问作者shorttriptomars
相关产品推荐
相关产品推荐

