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

如何基于字典合并两个Pandas DataFrame?

基于映射字典合并两个Pandas DataFrame的实现方法

实现步骤

要完成你需要的合并,核心思路是通过映射字典关联两个DataFrame的对应字段,结合预处理后的df2完成合并,具体操作如下:

  1. 预处理df2:去重保留唯一标识行
    由于df2中存在重复的col01值(如name1出现两次),而你的预期结果只匹配每个col01对应的第一条记录,所以先对df2去重:

    import pandas as pd
    
    # 构造原始DataFrame
    df1 = pd.DataFrame({
        'col11': ['abc', 'bcd', 'cdf', 'abc'],
        'col22': [25, 55, 15, 74],
        'col33': [36, 96, 19, 26]
    })
    
    df2 = pd.DataFrame({
        'col01': ['name1', 'name2', 'name3', 'name1'],
        'col02': ['x', 'g', 't', 'k'],
        'col03': [346, 926, 179, 286]
    })
    
    mydict = {'abc': 'name1', 'bcd': 'name2', 'cdf': 'name3'}
    
    # 对df2去重,保留每个col01的第一条记录
    df2_unique = df2.drop_duplicates(subset='col01', keep='first')
    
  2. 映射字段并合并DataFrame
    通过map方法将df1的col11转换为df2的col01对应值,再执行左连接合并:

    # 给df1添加映射后的col01列
    df1['col01'] = df1['col11'].map(mydict)
    
    # 左连接合并,确保df1的所有行都被保留
    merged_df = pd.merge(df1, df2_unique, on='col01', how='left')
    

最终结果

执行上述代码后,merged_df的输出与你预期的结果完全一致:

col11  col22  col33  col01 col02  col03
0   abc     25     36  name1     x    346
1   bcd     55     96  name2     g    926
2   cdf     15     19  name3     t    179
3   abc     74     26  name1     x    346

补充说明

  • 如果需要匹配df2中col01的所有重复记录,只需去掉df2.drop_duplicates这一步直接合并即可,但此时结果会出现多行匹配的情况。
  • 使用how='left'可以确保df1中的所有行都被保留,避免因映射不到而丢失数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:10:37