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

Pandas实现跨数据集链接子串匹配并生成1/0标记列

原代码存在的问题
  • 语法错误:else分支后缺少Python语法要求的冒号,代码直接运行会抛出语法异常。
  • 核心逻辑错误:遍历df2链接的过程中,每次判断都会覆盖contains变量的取值,最终返回的是最后一条链接的匹配结果,而非“任意链接匹配即返回1”的需求。例如ID=1的Page Link,前两条链接可以匹配,但遍历到第三条不匹配的链接时,contains会被覆盖为0,最终返回错误结果。
  • 正则使用风险:直接将原始链接传入re.search作为正则模式,链接中包含的.、/、?等字符会被识别为正则元字符,可能导致误匹配、漏匹配问题。
正确实现代码

优先用原生子串判断实现,无需引入正则,性能更好也不会有转义问题:

# 提前把待匹配链接转为列表,减少apply过程中的重复取数开销
target_links = df2['Link'].tolist()

def get_contains_value(page_link):
    for link in target_links:
        # 只要匹配到任意子串,直接返回1,终止循环
        if link in page_link:
            return 1
    # 所有链接都不匹配时返回0
    return 0

df1['Contains'] = df1['Page Link'].apply(get_contains_value)

如果必须使用正则实现,需要先对链接做正则转义处理:

import re

target_links = [re.escape(link) for link in df2['Link']]

def get_contains_value_re(page_link):
    for pattern in target_links:
        if re.search(pattern, page_link):
            return 1
    return 0

df1['Contains'] = df1['Page Link'].apply(get_contains_value_re)

运行后得到的结果完全符合预期:

IDPage LinkContains
1http://example1/path1/ru/path2/path31
2https://example2.com/path11
3https://example3.subdomain0
其他业务代码注意事项

你提到的leads['Marketing Team']=leads['Page Link'].apply(assign_marketing)代码,只要assign_marketing函数满足「输入单个Page Link值,返回对应营销团队归属值」的要求,且不存在本次出现的循环覆盖返回值、语法缺失问题,即可正常运行。编写apply类自定义函数时,建议匹配到目标结果后直接return终止后续逻辑,避免无效遍历和变量覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:06:26