Pandas两DataFrame按ID匹配替换对应列值的实现问题
pandas ID列匹配替换解决方案
方案1:Series映射替换(推荐,适配你的场景)
该方案无需转换字典,仅通过pandas原生索引映射实现,资源消耗极低,完全适配你当前的数据规模:
# 构建ID到ACC的映射Series id_mapper = df2.set_index('ID')['ACC'] # 对df1的ID列做匹配替换,未匹配到的取值保留原值 df1['ID'] = df1['ID'].map(id_mapper).fillna(df1['ID'])
方案2:左连接替换(适合后续多列扩展匹配场景)
如果后续需要匹配df2的多列数据,可以用左连接的方式实现:
# 左连接匹配两个DataFrame的ID列 df1 = df1.merge(df2, on='ID', how='left') # 用匹配到的ACC值覆盖原ID列,未匹配到的保留原值 df1['ID'] = df1['ACC'].fillna(df1['ID']) # 删除临时生成的ACC列 df1.drop('ACC', axis=1, inplace=True)
性能说明
你当前的df2仅3652行,两种方案都可以秒级运行,不会出现性能瓶颈。其中方案1的映射Series内存占用仅为同规模字典的30%左右,完全不存在你之前遇到的转字典数据量过大的问题。
内容的提问来源于stack exchange,提问作者honhon
相关产品推荐
相关产品推荐

