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

Pandas基于复合键匹配两个DataFrame实现值映射的方法咨询

可行实现方案

这里提供两种经过验证的实现方式,都不需要构造复杂的嵌套字典:

方案1:宽表转长表+左连接(推荐,逻辑清晰易调试)

该方案适配性最强,即使后续Values_df的topic列、cat行有新增也不需要修改逻辑,匹配不到的取值会自动填充NaN方便排查异常。

import pandas as pd

# 步骤1:将Values_df从宽格式转为长格式
values_long = Values_df.melt(
    id_vars="cat",  # 保持cat列不变
    var_name="topic",  # 原列名转为topic列的值
    value_name="Value"  # 原单元格值转为Value列
)

# 步骤2:和Main表左连接匹配得到目标列
Main = Main.merge(values_long, on=["cat", "topic"], how="left")

方案2:索引快速匹配(代码简洁,小数据量效率更高)

如果可以确认Main里的所有cat和topic取值都存在于Values_df中,可以用这种更短的写法:

# 步骤1:将cat设为Values_df的索引
values_idx = Values_df.set_index("cat")

# 步骤2:逐行匹配取值
Main["Value"] = Main.apply(lambda row: values_idx.loc[row["cat"], row["topic"]], axis=1)

你之前尝试转置后左连接失败的核心原因是没有做宽转长处理,宽表直接关联逻辑不匹配,以上两种方案都可以完美解决你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:09:03