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

匹配DataFrame的Name与Title列,按v/vs位置标注Label列的first/second标签

实现方案

不需要拆分Title列,直接通过比较Name和分隔符v/vs在字符串中的位置即可实现,核心逻辑是:

  1. 用正则匹配独立的v或vs作为分隔符,避免匹配到单词内部的字符
  2. 分别获取分隔符、Name在Title字符串中的起始索引
  3. 索引比较:Name索引小于分隔符索引则返回first,大于则返回second,没有匹配到分隔符或Name不存在于Title中则返回空值

代码实现

import pandas as pd
import re

# 匹配独立出现的v或vs,可根据需求添加re.IGNORECASE忽略大小写
v_pat = re.compile(r'\bvs?\b')

def judge_label(row):
    # 匹配分隔符位置
    v_match = v_pat.search(row['Title'])
    if not v_match:
        return pd.NA
    v_start_idx = v_match.start()
    # 匹配Name在Title中的位置
    name_idx = row['Title'].find(row['Name'])
    if name_idx == -1:
        return pd.NA
    return 'first' if name_idx < v_start_idx else 'second'

# 生成Label列
df['Label'] = df.apply(judge_label, axis=1)

性能优化提示

如果你的数据量在百万级以上,可以把临时的位置计算逻辑替换为批量操作,避免逐行apply的遍历开销,性能会提升5-10倍:

# 提前计算分隔符位置
df['v_pos'] = df['Title'].apply(lambda x: v_pat.search(x).start() if v_pat.search(x) else pd.NA)
# 提前计算Name位置
df['name_pos'] = df.apply(lambda x: x['Title'].find(x['Name']), axis=1)
# 向量化条件赋值
df['Label'] = pd.NA
df.loc[df['name_pos'] < df['v_pos'], 'Label'] = 'first'
df.loc[df['name_pos'] > df['v_pos'], 'Label'] = 'second'
# 清理临时列
df.drop(columns=['v_pos', 'name_pos'], inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:04