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

Pandas使用Lambda比较两列货币值,逻辑判断结果异常求排查

问题排查与修复

核心问题分析

你的代码有三个关键错误,导致空值相关的判断逻辑完全无法触发:

  • 空值判断不匹配:你把字符串'nan'替换成了空字符串'',但代码里用x['a']==None判断空值——空字符串和None是完全不同的对象,这个判断永远为假。
  • 逻辑顺序错误:a和b都为空的判断放在了最后,而前面的a为空或b为空条件会先匹配,导致这个场景永远不会被触发。
  • 结果文本不符需求:代码里写的'Same'和需求里的'same'大小写不一致,'a & b missing'也和需求的'all missing'不符。

修复后的代码

import pandas as pd

# 货币列表
a = ('USD USD CAD nan JMD nan HKD CAD').split()
b = ('USD CAD RMB HKD nan nan USD EUR').split()

df = pd.DataFrame(list(zip(a, b)), columns=['a', 'b'])
df = df.replace('nan', '')

df['c'] = df.apply(lambda x: 
                   'all missing' if x['a'] == '' and x['b'] == ''
                   else 'same' if x['a'] == x['b']
                   else 'a missing' if x['a'] == ''
                   else 'b missing' if x['b'] == ''
                   else 'diff currency', axis=1)

修复说明

  1. 对齐空值判断:把==None改成=='',和你替换后的空值类型匹配。
  2. 调整判断优先级:把a和b都为空的判断放在最前面,避免被其他空值条件覆盖;再依次判断a==b、单空情况,最后处理货币不同的场景。
  3. 统一结果文本:完全对齐你需求里的文本内容(比如'same'、'all missing')。

运行后df['c']的结果会完全符合预期:

0          same
1    diff currency
2    diff currency
3    diff currency
4    diff currency
5     all missing
6    diff currency
7    diff currency
Name: c, dtype: object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:03:34