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

排查pandas DataFrame中判断整数是否在另一列整数字符串的代码错误

问题排查:Pandas判断整数是否存在于逗号分隔字符串列的错误

问题背景

现有如下Pandas DataFrame,需要新增一列DoIinDIDs,判断DucksOfInterests列的整数是否存在于对应行DuckIDs列的逗号分隔整数字符串中:

import pandas as pd
duck_ids = ["1, 4, 5, 7", "3, 11, 14, 27"]
ducks_of_interest = [4,15]
duck_df = pd.DataFrame(
    {
        "DucksOfInterests": ducks_of_interest,
        "DuckIDs": duck_ids
    }
)

尝试用apply+lambda实现时,两行都返回False,不符合预期:

duck_df['DoIinDIDs'] = duck_df.apply(lambda x: str(x['DuckIDs']) in [x['DucksOfInterests']], axis=1)

输出结果:

DucksOfInterests        DuckIDs  DoIinDIDs
0                 4     1, 4, 5, 7      False
1                15  3, 11, 14, 27      False

错误原因

原代码存在两个核心问题:

  • 逻辑方向完全颠倒:代码判断的是「整个DuckIDs字符串是否在包含单个兴趣ID的列表中」,而实际需求是「兴趣ID是否在DuckIDs拆分后的整数集合里」
  • 类型与匹配逻辑错误:str(x['DuckIDs'])是完整的逗号分隔字符串,[x['DucksOfInterests']]是包含整数的列表,字符串不可能等于整数,因此无论如何都会返回False

修正方案

方案1:拆分字符串并转换为整数列表判断(推荐)

将DuckIDs按逗号拆分,去除每个元素的空格后转成整数,再判断兴趣ID是否在该列表中:

duck_df['DoIinDIDs'] = duck_df.apply(
    lambda x: x['DucksOfInterests'] in [int(id.strip()) for id in x['DuckIDs'].split(',')],
    axis=1
)

方案2:字符串精确匹配(避免类型转换)

通过给两端添加逗号,避免部分匹配的歧义(比如避免把1误判为存在于"11"中):

duck_df['DoIinDIDs'] = duck_df.apply(
    lambda x: f", {x['DucksOfInterests']}, " in f", {x['DuckIDs']}, ",
    axis=1
)

修正后输出符合预期:

DucksOfInterests        DuckIDs  DoIinDIDs
0                 4     1, 4, 5, 7       True
1                15  3, 11, 14, 27      False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:37:51