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

如何基于Numpy数组子串匹配DataFrame内容并生成新列?

你可以直接用pandas自带的字符串提取方法实现需求,不需要嵌套np.where,代码更简洁易维护,同时完全对齐原有逻辑的匹配优先级(按animal_list的顺序优先匹配先出现的子串)。

实现代码

import pandas as pd
import numpy as np
# 如需处理带正则特殊字符的子串,可导入re模块做转义
# import re

# 路径定义
csv_report = filepath

# 读取CSV生成DataFrame
csv_df = pd.read_csv(csv_report)

animal_list = np.array(['Condor', 'Marmot','Bear','Pika','Rat','Racoon','Opossum'])

# 构建正则匹配规则,按列表顺序优先匹配
# 如果子串包含正则特殊字符(. * + ? 等),改用下行写法转义:
# pattern = '|'.join(re.escape(item) for item in animal_list)
pattern = '|'.join(animal_list)

# 从item_name列提取匹配到的子串写入animal列
csv_df['animal'] = csv_df['item_name'].str.extract(f'({pattern})', expand=False)

逻辑说明

  • 原有嵌套np.where的逻辑是按你输入子串的顺序依次匹配,命中第一个符合的子串就停止后续匹配,上面的写法通过正则|的优先匹配规则完全对齐该逻辑
  • 如果某行item_name没有匹配到任何animal_list里的子串,animal列对应位置会返回NaN,和原有逻辑的输出结果完全一致
  • 该方法是pandas向量化操作,比嵌套np.where或者行遍历apply的效率更高,子串数量多的时候优势更明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:15:02