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

如何用Pandas通过两个DataFrame的x1、x2匹配获取对应y值

用Pandas匹配多列并填充对应列值的解决方案

嘿,这个需求其实用Pandas的合并操作就能轻松搞定,我来给你一步步拆解~

首先,我们先把你给出的示例数据用代码还原出来,方便直接验证:

import pandas as pd

# 构造示例DataFrame A
data_a = {
    'x1': [0, 0, 1, 1, 1],
    'x2': [2, 6, 7, 8, 9],
    'y': [0.002255, -0.000427, 0.006804, -0.000287, -0.000391]
}
df_a = pd.DataFrame(data_a)

# 构造示例DataFrame B
data_b = {
    'x1': [0, 1, 1],
    'x2': [2, 7, 9]
}
df_b = pd.DataFrame(data_b)

接下来,核心操作就是用merge方法,基于x1和x2这两列进行左连接,这样既能保留DataFrame B的所有行,又能把A中对应组合的y值填充进来:

# 按x1、x2匹配,将A的y列合并到B中
df_b_with_y = df_b.merge(df_a[['x1', 'x2', 'y']], on=['x1', 'x2'], how='left')

代码解释:

  • on=['x1', 'x2']:指定用这两列作为匹配的唯一键,确保只有当两列的值都完全匹配时才会填充y值
  • how='left':以df_b为基准表,保留它的所有行;如果B中某个x1+x2组合在A里找不到对应记录,y列会显示NaN(如果需要处理这种缺失值,可以后续用df_b_with_y.fillna(...)来填充默认值)

运行完上面的代码后,你得到的df_b_with_y就是想要的结果:

x1 x2 y
0 0 2 0.002255
1 1 7 0.006804
2 1 9 -0.000391

如果你之前用的是其他方法(比如单独用map),其实不太适合多列匹配的场景,merge是Pandas中处理这类关联匹配最直接、最可靠的方式,尤其是当你的数据量比较大或者存在重复值时,它的效率和准确性都更有保障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:01:10