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

如何用Python判断DataFrame两字段值是否相等并标记结果?

问题分析与解决

你的代码逻辑错误:df1.duplicated(subset=['A', 'B'], keep=False)的作用是检测每行的A、B组合是否在DataFrame中重复出现,而非比较同一行内A和B的取值是否相等,这才导致结果不符合预期。

正确实现方式

以下几种方法都能实现你要的“每行A、B值相等标记OK,不等标记NG”的需求:

方法1:向量化布尔判断(推荐,效率最高)

import pandas as pd
import numpy as np

data1 = {'A': [1, 1, 2, 3, 4, 4, 2, 1], 'B': [2, 2, 3, 4, 4, 4, 1, 2]}
df1 = pd.DataFrame(data1)
# 直接比较A和B列,用np.where转换为OK/NG
df1['OUTPUT'] = np.where(df1['A'] == df1['B'], 'OK', 'NG')
print(df1)

方法2:使用map转换布尔结果

和你原代码写法类似,但逻辑正确:

import pandas as pd

data1 = {'A': [1, 1, 2, 3, 4, 4, 2, 1], 'B': [2, 2, 3, 4, 4, 4, 1, 2]}
df1 = pd.DataFrame(data1)
# 先得到每行A==B的布尔序列,再映射为OK/NG
df1['OUTPUT'] = (df1['A'] == df1['B']).map({True: 'OK', False: 'NG'})
print(df1)

方法3:apply逐行判断

适合复杂逻辑,效率略低于向量化方法:

import pandas as pd

data1 = {'A': [1, 1, 2, 3, 4, 4, 2, 1], 'B': [2, 2, 3, 4, 4, 4, 1, 2]}
df1 = pd.DataFrame(data1)
# 逐行比较A和B的值
df1['OUTPUT'] = df1.apply(lambda x: 'OK' if x['A'] == x['B'] else 'NG', axis=1)
print(df1)

正确输出结果

A  B OUTPUT
0  1  2     NG
1  1  2     NG
2  2  3     NG
3  3  4     NG
4  4  4     OK
5  4  4     OK
6  2  1     NG
7  1  2     NG

关于字符串类型的补充说明

如果A、B字段实际是字符串类型(比如'1'、'2'),上述方法依然有效,只要同一行的A、B字符串内容完全一致,就会正确标记为OK。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:46:10