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

Python合并DataFrame异常:非唯一关联键导致结果不符预期

解决DataFrame左合并后仅第一行匹配的问题

先排查键的匹配性

首先确认两个DataFrame的关联键(Product_Type和Product_Colour)内容完全一致,常见隐性不匹配原因及处理方式:

  • 空格/不可见字符:比如df1的Product_Type末尾带空格,df2的不带,导致匹配失败。清理代码:
    df1[['Product_Type', 'Product_Colour']] = df1[['Product_Type', 'Product_Colour']].apply(lambda x: x.str.strip())
    df2[['Product_Type', 'Product_Colour']] = df2[['Product_Type', 'Product_Colour']].apply(lambda x: x.str.strip())
    
  • 大小写差异:比如df1是'shirt',df2是'Shirt',统一大小写:
    df1[['Product_Type', 'Product_Colour']] = df1[['Product_Type', 'Product_Colour']].apply(lambda x: x.str.lower())
    df2[['Product_Type', 'Product_Colour']] = df2[['Product_Type', 'Product_Colour']].apply(lambda x: x.str.lower())
    

对df2去重后再合并

如果df2中同一组关联键对应多条Code=KI的记录,先去重保留唯一映射关系,避免无效笛卡尔积,同时保证所有df1行都能匹配到Code:

# 按关联键去重,保留第一条有效记录
df2_unique = df2.drop_duplicates(subset=['Product_Type', 'Product_Colour'], keep='first')
df3 = pd.merge(df1, df2_unique, on=['Product_Type','Product_Colour'], how='left')

直接映射赋值(替代merge的方案)

如果明确关联键对应的Code是固定值,也可以直接通过映射给df1新增Code列:

# 提取键与Code的唯一映射
code_map = df2.drop_duplicates(subset=['Product_Type', 'Product_Colour']).set_index(['Product_Type', 'Product_Colour'])['Code']
# 给df1赋值
df1['Code'] = df1.set_index(['Product_Type', 'Product_Colour']).index.map(code_map)
df3 = df1.copy()

验证示例

完整可运行的示例代码:

import pandas as pd

# 构造测试df1
df1 = pd.DataFrame({
    'Product_Type': ['Shirt', 'Shirt', 'Shirt'],
    'Product_Colour': ['Black', 'Black', 'Black'],
    'Details': ['S', 'M', 'L']
})

# 构造测试df2(含多条相同键的记录)
df2 = pd.DataFrame({
    'Product_Type': ['Shirt', 'Shirt', 'Pants'],
    'Product_Colour': ['Black', 'Black', 'Blue'],
    'Code': ['KI', 'KI', 'KJ']
})

# 执行合并
df2_unique = df2.drop_duplicates(subset=['Product_Type', 'Product_Colour'])
df3 = pd.merge(df1, df2_unique, on=['Product_Type','Product_Colour'], how='left')
print(df3)

输出结果:

Product_Type Product_Colour Details Code
0        Shirt          Black       S   KI
1        Shirt          Black       M   KI
2        Shirt          Black       L   KI

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:03:29