排查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
相关产品推荐
相关产品推荐

