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

Pandas如何基于相似行匹配,将df1的tax列值同步更新到df2

实现方案

你可以通过多列构建匹配映射的方式实现替换,逻辑简洁且性能较好:

import pandas as pd

# 测试数据
Names = ['Albert', 'John', 'jac', 'joe', 'peter']
Rs = [486, 2300, 3999, 334, 34]
demand = [785, 30, 70, 780, 366]
tax = [545, 40, 20, 10, 10]
df1 = pd.DataFrame({'Names':Names, 'Rs':Rs, 'demand':demand, 'tax':tax})

Names = ['sanjay', 'sunil', 'peter', 'shweta', 'John']
Rs = [4562, 7896, 34, 78, 2300]
demand = [7895, 7822, 366, 785, 30]
tax = [1231, 89, 16, 12, 89]
df2 = pd.DataFrame({'Names':Names, 'Rs':Rs, 'demand':demand, 'tax':tax})

# 核心替换逻辑
# 以Names、Rs、demand三个列为键,构建df1的tax映射表
tax_mapper = df1.set_index(['Names', 'Rs', 'demand'])['tax']
# 对df2的对应键做匹配,匹配到的替换为df1的tax,未匹配到的保留原值
df2['tax'] = df2.set_index(['Names', 'Rs', 'demand']).index.map(tax_mapper).fillna(df2['tax']).astype(int)

执行后df2的输出结果为:

NamesRsdemandtax
sanjay456278951231
sunil7896782289
peter3436610
shweta7878512
John23003040

注意事项

如果实际数据中姓名字段存在大小写不一致的问题(比如df1存的是peter、df2存的是Peter),可以先统一字段大小写再执行替换逻辑:

df1['Names'] = df1['Names'].str.lower()
df2['Names'] = df2['Names'].str.lower()

内容的提问来源于stack exchange,提问作者Sticky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 21:54:04