Pandas合并DataFrame异常:所有行匹配OEM数据问题排查
问题分析与解决办法
看起来你遇到的核心问题是第一个DataFrame的Choice字段用错了——从你给出的第一个表格内容来看,每行其实包含四个数据项(ID、CustomerType、决策属性、实际选择),但你只给了三个列名,这导致Choice列存储的是Durability、Price这类用户决策时考虑的属性,而不是用来和第二个表格匹配的OEM/TPN。
为什么会出现全匹配OEM的情况?
大概率是你在读取第一个DataFrame时列分隔出了问题,比如分隔符设置错误,导致Choice列被错误地赋值成了OEM(或者部分行的属性值被错误合并,使得pandas误判了匹配关系)。但不管怎样,核心问题是你用来匹配的列不是真正的选择值列。
解决步骤
- 修正第一个DataFrame的列结构
先把survey的列调整成正确的四列:ID、CustomerType、Attribute(存储Durability/Price等决策属性)、Choice(存储OEM/TPN)。如果是从文本读取的,确保分隔符正确;如果已经读取进来了,直接重命名列:# 假设读取后的survey有四列,默认列名是['ID', 'CustomerType', 'Choice', 'Unnamed: 3'] survey.columns = ['ID', 'CustomerType', 'Attribute', 'Choice'] - 使用正确的列进行合并
现在用真正存储OEM/TPN的Choice列去和rel_attr的Type列合并:data = pd.merge(survey, rel_attr, left_on='Choice', right_on='Type', how='left') - 验证结果
修正后,行10和行12的Choice是TPN,会匹配第二个表格里的TPN行;其他行的Choice是OEM,匹配OEM行,这样就不会出现所有行都匹配OEM的情况了。
内容的提问来源于stack exchange,提问作者Yikes
相关产品推荐
相关产品推荐

