Pandas如何基于指定列匹配两个DataFrame并更新对应列值
解决方案
这里提供两种远优于for循环的高效实现方式,均基于pandas原生向量运算,避免了Python层循环的性能开销,数据量越大性能优势越显著。
方法1:映射法(单字段更新最优)
通过将df2的D列作为索引、C列作为值构造映射关系,直接对df1的C列批量赋值:
# 构造D到对应C值的映射关系 c_map = df2.set_index('D')['C'] # 批量更新df1的C列 df1['C'] = df1['D'].map(c_map)
如果存在df1中部分D值在df2中没有匹配项、需要保留df1原有C值的场景,可增加缺省值处理:
df1['C'] = df1['D'].map(c_map).fillna(df1['C'])
方法2:关联法(适合多字段同时更新)
如果后续需要同时更新多个列,可使用左关联的方式实现:
# 先删除df1原有C列,再和df2的D、C列按D关联 df1 = df1.drop(columns=['C']).merge(df2[['D', 'C']], on='D', how='left')
两种方法执行后得到的df1都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者ChinwalPrasad
相关产品推荐
相关产品推荐

