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

Python DataFrame忽略空单元格对比列值标记结果问题求助

问题说明

现有包含少量空单元格的数据集,结构如下:

PQRSTUresult
43142061YES
61819.2
628721YES
721723YES
58510YES

需求为对比三对列:(P,S)、(Q,T)、(R,U),对比时忽略空单元格,只要三组对比中至少存在一组两列值不匹配,就在result列打印YES。

原有实现代码如下:

a1=((file_1.iloc[:,13]!= file_1.iloc[:,16])& (file_1.iloc[:,13].notna() & file_1.iloc[:,16].notna()))
b1=((file_1.iloc[:,14]!= file_1.iloc[:,17]) & (file_1.iloc[:,14].notna() & file_1.iloc[:,17].notna()))
c1=((file_1.iloc[:,12] != file_1.iloc[:,15]) & (file_1.iloc[:,12].notna() & file_1.iloc[:,15].notna()))

mask9 = (a1|(b1&c1))

该代码无法在所有符合条件的场景下正确输出YES,需要排查问题并给出正确实现。

问题根因

原有代码的最终判断逻辑错误:mask9 = (a1|(b1&c1)) 仅会在两种场景下标记YES:

  • P和S列不匹配
  • Q和T列不匹配 且 R和U列同时不匹配
    完全漏掉了「仅Q和T不匹配、其余对无有效不匹配」「仅R和U不匹配、其余对无有效不匹配」这两类符合要求的场景,自然无法覆盖所有正确结果。另外原代码变量无对应注释,可读性差,后续维护容易出现列对应错误。
正确实现代码

核心逻辑修正:三个不匹配判断为或关系,只要任意一对满足「两列均非空且值不等」,就标记为YES。

# 判断(P,S)对:两列均非空且值不相等
ps_mismatch = file_1.iloc[:,12].notna() & file_1.iloc[:,15].notna() & (file_1.iloc[:,12] != file_1.iloc[:,15])
# 判断(Q,T)对:两列均非空且值不相等
qt_mismatch = file_1.iloc[:,13].notna() & file_1.iloc[:,16].notna() & (file_1.iloc[:,13] != file_1.iloc[:,16])
# 判断(R,U)对:两列均非空且值不相等
ru_mismatch = file_1.iloc[:,14].notna() & file_1.iloc[:,17].notna() & (file_1.iloc[:,14] != file_1.iloc[:,17])

# 任意一对不匹配即标记为YES
mask9 = ps_mismatch | qt_mismatch | ru_mismatch

# 给result列赋值
file_1.loc[mask9, 'result'] = 'YES'

用提供的样例数据验证,所有符合条件的行都能被正确标记:

  • 第二行仅R=18、U=19.2不匹配,其余对存在空值,会被正确标记为YES
  • 第四行仅R=21、U=23不匹配,Q和T值相等,会被正确标记为YES
  • 第五行仅R=8、U=10不匹配,P和S值相等,会被正确标记为YES

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:03:21