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

如何判断DataFrame的Code列值是否为另一DataFrame的City列子串并新增exists列

解决DataFrame中子串匹配生成exists列的问题

问题原因

你使用的df1["Code"].isin(df2["City"])是精确匹配逻辑,它只会检查Code列的完整值是否完全等于df2 City列中的某一项。比如don和Paris/London等City值都不相等,所以返回全False,但你需要的是子串包含匹配——判断Code值是否是某个City字符串的一部分。

正确实现代码

可以用apply结合any()实现子串检查,逻辑清晰且易理解:

# 先把df2的City列转为列表,方便后续遍历检查
city_list = df2["City"].tolist()

# 为df1新增exists列,判断每个Code是否是任意City的子串
df1["exists"] = df1["Code"].apply(lambda code: any(code in city for city in city_list))

执行后得到的df1与期望结果一致:

namefamily-nameCodeexists
JohnheathdonTrue
EricMilesorkTrue
DukeBravobrrFalse
JamesMacrisTrue
AlecBluntjjhFalse

大数据量优化方案

如果数据集规模较大,上面的遍历方法效率偏低,可以用向量化的正则匹配方案提升性能:

# 生成匹配所有Code子串的正则模式,用|分隔不同匹配项
pattern = '|'.join(df1["Code"])
# 从所有City中提取出包含的Code子串,去重后得到匹配集合
matched_codes = df2["City"].str.extract(f'({pattern})', expand=False).dropna().unique()
# 最后用isin判断Code是否在匹配集合中
df1["exists"] = df1["Code"].isin(matched_codes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:35:21