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

Pandas基于配置字典校验输入数据组合有效性代码问题排查

代码逻辑错误排查

你的校验逻辑存在两处核心bug,导致结果不符合预期:

  • 存在性判断对象错误:config_dict的结构为{ContractID: [该合同下所有合法PBID]},config_dict.values()获取到的是所有PBID列表组成的集合,并非单个PBID值,因此s["PBID"] not in config_dict.values()的判断结果永远为True,完全无法正确校验PBID是否合法。
  • 分支覆盖不全:当输入记录的ContractID根本不存在于配置表(比如示例中的H4599)时,config_dict.get(s["ContractID"])会返回None,原逻辑会直接将这类记录判定为Valid,和预期的Invalid结果不符。
修正后代码
import pandas as pd

input_df=pd.DataFrame({'Index': [1,2,3,4,5,6], 
                      'ContractID' : ['H9500','H9500','H9500','H3544','H3544','H4599'],
                       'PBID': ['456','008','002','853','802','465']})

config_df=pd.DataFrame({'ContractID':['H9500','H9500','H3544','H3544','H3544'],
                        'PBID':['002','008','800','801','802']})

# 把每个合同对应的合法PBID转成集合,判断存在性的效率更高
config_dict={k: set(v) for k,v in config_df.groupby("ContractID")["PBID"]}

def test_6_3(s):
    valid_pbid_list = config_dict.get(s["ContractID"])
    # 两类无效场景:合同ID不在配置表、合同ID存在但PBID不在该合同的合法列表中
    if not valid_pbid_list or s["PBID"] not in valid_pbid_list:
        return "Invalid"
    return "Valid"
    
input_df['test_6_3'] = input_df.apply(test_6_3, axis=1)
print(input_df)
运行结果

执行代码后输出完全匹配预期:

Index ContractID PBID test_6_3
0      1      H9500  456  Invalid
1      2      H9500  008    Valid
2      3      H9500  002    Valid
3      4      H3544  853  Invalid
4      5      H3544  802    Valid
5      6      H4599  465  Invalid

性能提示:当配置表数据量较大时,用set存储合法PBID比list的查找效率高很多,能大幅缩短apply的执行时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:51:38