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

Pandas根据devicename子串及make列值生成devicevalue新列问题

解决方案

核心修改逻辑:原函数从字符串末尾倒序提取数字的逻辑无法适配带后缀的设备名,改为用正则表达式直接匹配switch关键字后紧跟的连续数字段,即可忽略后续所有非数字后缀,稳定拿到目标数值。

最小修改版本(兼容原有代码结构)

只需要修改get_number_suffix函数即可,其余代码无需变动:

import re

def get_number_suffix(devicename: str) -> int:
    # 匹配switch后紧跟的连续数字,忽略后续所有字符
    match_res = re.search(r"switch(\d+)", devicename)
    # 若匹配失败可根据业务需求调整默认返回值,这里默认返回0
    return int(match_res.group(1)) if match_res else 0


def compute_devicevalue(row) -> int:
    if 'netgear' in row['make']:
        return 0
    return 1 if get_number_suffix(row['devicename']) >=20 else 0

df['devicevalue'] = df.apply(compute_devicevalue, axis=1)

更高性能的向量化版本(适合大数据量场景)

避免使用行遍历的apply方法,直接用pandas内置的向量化操作,执行效率提升明显:

import re
import pandas as pd

# 初始化默认值为0(netgear设备直接保留默认值即可)
df['devicevalue'] = 0
# 仅处理非netgear的设备
cisco_rows = df['make'] != 'netgear'
df.loc[cisco_rows, 'devicevalue'] = (
    df.loc[cisco_rows, 'devicename']
    .str.extract(r"switch(\d+)", expand=False)
    .astype(int)
    >= 20
).astype(int)

两种方案都可以正确处理带-new、字母后缀的设备名,比如switch23-new会提取到23,switch40e会提取到40,完全符合赋值规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:15:03