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
相关产品推荐
相关产品推荐

