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

如何在Python中基于部分字符串匹配创建标签?

解决方案

你的代码失效的核心原因是:Python中==是精确字符串匹配,SQL风格的%通配符在这里不生效——你不能直接用x == 'OC%'判断字符串是否以OC开头,这只会匹配和OC%完全一致的字符串。

下面是几种可行的修正方案:

方法1:使用str.startswith()直接匹配前缀

这是最直观的修正方式,利用Python字符串内置的startswith()方法检查前缀:

import pandas as pd

# 示例数据
data = {'Index': ['NDP2207342', 'OC22178098', 'SD88730948', 'OC39002847', 'PTP9983930', 'NDP9110876']}
df = pd.DataFrame(data)

def labelApply(x):
    if x.startswith('OC'):
        return 'OCAR'
    elif x.startswith('NDP'):
        return 'NCAR'
    elif x.startswith('PTP'):
        return 'SWAR'
    elif x.startswith('SD'):
        return 'SDAR'
    else:
        return 'Out of Area'

df['labels'] = df['Index'].apply(labelApply)

方法2:字典映射维护规则(更易扩展)

如果后续需要新增更多前缀和标签,用字典存储映射关系,循环匹配的方式更便于维护:

prefix_label_map = {
    'OC': 'OCAR',
    'NDP': 'NCAR',
    'PTP': 'SWAR',
    'SD': 'SDAR'
}

def labelApply(x):
    for prefix, label in prefix_label_map.items():
        if x.startswith(prefix):
            return label
    return 'Out of Area'

df['labels'] = df['Index'].apply(labelApply)

方法3:矢量化操作(适合大数据量)

用pandas的矢量化方法结合numpy.select,避免循环,处理大数据集时效率更高:

import numpy as np

# 定义匹配条件和对应标签
conditions = [
    df['Index'].str.startswith('OC'),
    df['Index'].str.startswith('NDP'),
    df['Index'].str.startswith('PTP'),
    df['Index'].str.startswith('SD')
]
labels = ['OCAR', 'NCAR', 'SWAR', 'SDAR']

df['labels'] = np.select(conditions, labels, default='Out of Area')

注意事项

如果存在前缀包含关系(比如同时有O和OC作为前缀),需要把更长的前缀放在匹配顺序的前面,避免短前缀先匹配导致错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:15:25