存在重复列名时如何匹配两个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
相关产品推荐
相关产品推荐

