多列匹配合并两个DataFrame数据 替代Excel Vlookup实现高效查询
实现方案
推荐优先使用map字典映射方案,运算效率远高于多次pd.merge,完美适配大表场景:
步骤1:读取数据
import pandas as pd # 读取两个Excel表数据,可根据实际情况调整sheet_name等参数 df1 = pd.read_excel("表1.xlsx") df2 = pd.read_excel("表2.xlsx")
步骤2:构建ID-规模映射字典
将表2的主键和对应值转换为字典,单次遍历即可完成,后续查找效率为O(1):
id_size_map = df2.set_index("Company ID")["Company Size"].to_dict()
步骤3:为表1三列分别匹配规模
直接调用Series的map方法,和Vlookup的匹配逻辑完全一致,匹配不到的ID会返回NaN:
df1["Target Size"] = df1["Target Company ID"].map(id_size_map) df1["Sub Size"] = df1["Subsidiary ID"].map(id_size_map) df1["Parent Size"] = df1["Parent Company ID"].map(id_size_map)
步骤4:调整列顺序得到最终结果
result_df = df1[["Target Company ID", "Target Size", "Subsidiary ID", "Sub Size", "Parent Company ID", "Parent Size"]]
可选merge实现方案(仅推荐小数据量场景使用)
如果坚持用merge实现,可通过三次左连接+重命名列完成:
# 匹配目标公司规模 temp = df1.merge(df2, left_on="Target Company ID", right_on="Company ID", how="left")\ .rename(columns={"Company Size": "Target Size"})\ .drop(columns="Company ID") # 匹配子公司规模 temp = temp.merge(df2, left_on="Subsidiary ID", right_on="Company ID", how="left")\ .rename(columns={"Company Size": "Sub Size"})\ .drop(columns="Company ID") # 匹配母公司规模 result_df = temp.merge(df2, left_on="Parent Company ID", right_on="Company ID", how="left")\ .rename(columns={"Company Size": "Parent Size"})\ .drop(columns="Company ID")
内容的提问来源于stack exchange,提问作者premiumcopypaper
相关产品推荐
相关产品推荐

