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

如何精确匹配两个DataFrame并输出1(匹配)/0(不匹配)?求解方法异常

DataFrame对应元素精确匹配输出1/0

需求

精确匹配两个DataFrame的对应元素,匹配则输出1,不匹配则输出0。

原始数据

df1

name     |   age    |   state    |   number   | score
------------------------------------------------------
A            23         AZ         5434567        92.1
B            54         AZ         1234543        87.6
C            32         AZ         7654344        89.9
D            44         GA         8765433        72.4

df2

name     |   age    |   state    |   number   | score
------------------------------------------------------
A            23         GA         5434567       92.1
D            54         AZ         1234543       76.4
C            33         AZ         7654344       99.9
D            46         GA         8765433       72.4

期望输出

name     |   age    |   state    |   number   | score
-------------------------------------------------------
1            1            0            1          1
0            1            1            1          0
1            0            1            1          0
1            0            1            1          1

尝试过的代码及错误输出

代码1:使用eq方法

outputdf = df1.eq(df2)

错误输出:

name     |   age    |   state    |   number   | score
-------------------------------------------------------
1            1            0            1          0
0            1            1            1          1
1            0            1            1          1
1            0            1            1          1

代码2:使用ne方法

outputdf = df1.ne(df2)

错误输出:

name     |   age    |   state    |   number   | score
-------------------------------------------------------
1            1            0            1          0
0            1            1            1          1
1            0            0            0          1
0            0            0            0          1

解决方案

问题根源在于浮点数精度误差和方法逻辑不匹配:

  • eq方法直接比较浮点数时,因二进制存储的微小差异会误判相等性
  • ne方法是判断元素不相等,和需求的“匹配输出1”逻辑完全相反

正确代码

# 处理浮点数精度后再匹配,最后转换为1/0格式
outputdf = df1.round(1).eq(df2.round(1)).astype(int)

步骤解释

  1. 精度修正:用round(1)对含浮点数的score列保留一位小数,消除存储导致的微小误差
  2. 元素匹配:eq方法判断对应位置元素是否相等,返回布尔值
  3. 格式转换:astype(int)将布尔值True转为1,False转为0,符合输出要求

执行以上代码即可得到期望的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:31:09