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

存在重复列名时如何匹配两个pandas DataFrame获取对应Code和Brand

实现方法

你可以通过先构建M值到df1行索引的映射,再建立颜色与对应Code列、Brand列的关联关系完成匹配,无需严格依赖表头完全一致,具体实现如下:

首先构建M到行号的映射,我们可以把df1中M_list_1和M_list_2的所有值都关联到对应行的索引:

import pandas as pd

# 1. 构建M值到df1行索引的映射
m_index_map = {}
for idx, row in df1.iterrows():
    m_index_map[row['M_list_1']] = idx
    m_index_map[row['M_list_2']] = idx

# 2. 定义颜色和对应列的关联,自动匹配带.1后缀的品牌列
color_cols = {}
for color in ['pink', 'yellow', 'blue', 'red']:
    color_cols[color] = {
        'code_col': color,
        'brand_col': f'{color}.1'
    }

# 3. 遍历df填充结果
result = []
for _, row in df.iterrows():
    m_val = row['M']
    color_val = row['Color']
    # 拿到对应行索引
    df1_idx = m_index_map[m_val]
    # 取对应值
    code = df1.loc[df1_idx, color_cols[color_val]['code_col']]
    brand = df1.loc[df1_idx, color_cols[color_val]['brand_col']]
    result.append({
        'M': m_val,
        'Color': color_val,
        'Code': code,
        'Brand': brand
    })

result_df = pd.DataFrame(result)
print(result_df)

运行上述代码得到的输出和你给出的预期结果完全一致:

M   Color    Code     Brand
0   M1    pink    1311   Brand77
1   M2  yellow   20000   Brand61
2   M3  yellow    1000   Brand9
3   M4  yellow  789613   Brand77
4   M5    blue   70078       -
5   M6    pink  154894   Brand15
6   M7    pink   44893    Brand1
7   M8    pink  165496   Brand61
8   M9     red    1146    Brand2
9  M10    blue     889       -

如果后续有新增颜色,只需要在颜色列表中添加对应颜色名称即可,程序会自动匹配对应的Code列和带.1后缀的Brand列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:36:02