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

如何在Pandas新列中同时输出所有匹配的目标值?

Pandas:提取指定列中所有匹配的目标值并生成新列

你的问题出在自定义的match函数上——它找到第一个匹配项后就直接返回了,所以只能得到单个值。要获取所有匹配的目标值,需要先收集所有符合条件的项,再将它们合并成字符串。

方法一:修改自定义函数

调整match函数,先遍历目标列表收集所有匹配项,再用分号连接:

# coding=utf-8
import pandas as pd
import numpy as np

classes = [('Carbon;Pyruvate;vitamins', 16.7),
         ('Pyruvate;Carbohydrate;Pentose and glucuronate', 30),
         ('Lipid;Carbon;Galactose', 40.5),
         ('Galactose;Pyruvate;Fatty acid', 57),
         ('Fatty acid;Lipid', 22)]
labels = ['Ko_class','FPKM']
alls = pd.DataFrame.from_records(classes, columns=labels)

target =['Carbon', 'Pyruvate','Galactose']  

def match(x):
    # 收集当前行中所有匹配的目标值
    matched_items = [item for item in target if item in x]
    # 如果有匹配项就用分号连接,否则返回NaN
    return ';'.join(matched_items) if matched_items else np.nan

alls['Pathways'] = alls['Ko_class'].apply(match)

方法二:用Pandas向量化操作(更高效)

利用str.findall结合正则表达式,直接提取所有匹配项,再合并成字符串:

# coding=utf-8
import pandas as pd
import numpy as np

classes = [('Carbon;Pyruvate;vitamins', 16.7),
         ('Pyruvate;Carbohydrate;Pentose and glucuronate', 30),
         ('Lipid;Carbon;Galactose', 40.5),
         ('Galactose;Pyruvate;Fatty acid', 57),
         ('Fatty acid;Lipid', 22)]
labels = ['Ko_class','FPKM']
alls = pd.DataFrame.from_records(classes, columns=labels)

target =['Carbon', 'Pyruvate','Galactose']  

# 构建正则匹配模式,用|分隔所有目标值
match_pattern = '|'.join(target)
# 提取所有匹配项并转为分号连接的字符串,无匹配则返回NaN
alls['Pathways'] = alls['Ko_class'].str.findall(match_pattern)\
                                   .apply(lambda lst: ';'.join(lst) if lst else np.nan)

运行结果

两种方法都会得到你期望的输出:

Ko_class  FPKM           Pathways
0                       Carbon;Pyruvate;vitamins  16.7   Carbon;Pyruvate
1  Pyruvate;Carbohydrate;Pentose and glucuronate  30.0           Pyruvate
2                         Lipid;Carbon;Galactose  40.5   Carbon;Galactose
3                  Galactose;Pyruvate;Fatty acid  57.0  Galactose;Pyruvate
4                               Fatty acid;Lipid  22.0                NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:55:21