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

如何使用Pandas匹配两个DataFrame多列并映射对应值到目标列

问题原因

你之前的匹配逻辑存在两个错误:

  1. 关联字段匹配错误:你把df1的col_a、col_b和df2的col_1、col_2做关联,但需求是df1的col_a、col_b要和df2的col_2、col_3匹配
  2. 关联方式选择错误:outer关联会保留两个表的所有行,所以会出现半行空值的拆分结果,你需要保留df1的全部行,应该用left左关联

实现代码

import pandas as pd
import numpy as np

# 先处理df2,只保留需要的关联字段和结果字段,避免冗余列
df2_use = df2[['col_2','col_3','e_values']]

# 左关联匹配,关联键对应正确的字段
df_result = pd.merge(
    df1.drop(columns=['e_values']), # 删掉df1原有的空e_values列,避免冲突
    df2_use,
    how='left',
    left_on=['col_a','col_b'],
    right_on=['col_2','col_3']
)

# 填充未匹配的行,以下两种填充方式按需选其一即可
# 方式1:填充固定无匹配标识
df_result['e_values'] = df_result['e_values'].fillna('no match, random list of values')

# 方式2:填充随机列表值
# df_result['e_values'] = df_result['e_values'].apply(lambda x: x if pd.notna(x) else list(np.random.rand(3)))

# 删掉多余的关联字段,得到最终结果
df_result = df_result.drop(columns=['col_2','col_3'])

逻辑说明

  • 关联前先精简df2,只保留需要用到的关联列和取值列,避免最终结果出现多余的无用字段
  • 左关联how='left'可以100%保留df1的所有行结构,不会出现额外拆分的空行
  • 最终通过fillna或者apply自定义未匹配行的填充逻辑,完全符合预期输出要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:09:03