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

如何使用Pandas Apply遍历嵌套列表并返回首个匹配项

解决Pandas中嵌套项目列表的匹配问题

要实现遍历嵌套项目列表,为DataFrame每行的project_names子列表返回对应嵌套子列表的首个匹配值,可以按以下步骤编写适配嵌套列表的apply函数:

核心逻辑

针对project_list_1中的每个子组:

  1. 检查当前行的project_names是否存在包含该子组内任意关键词的项目(不区分大小写)
  2. 一旦找到匹配,就将该子组的第一个元素加入结果列表
  3. 若所有子组都无匹配,则返回[None]

完整代码实现

import pandas as pd

# 初始化数据
data = {'project_names': [['Datalabor', 'test', 'tpuframework'], ['regETU', 'register', 'tpuframework'], [], ['gpuframework', 'cpuframework']]}
df = pd.DataFrame(data)

project_list_1 = [
    ['labor', 'DataLab', 'Anotherdatalabor'],
    ['reg', 'register'],
    ['gpu'],
    ['tpu']
]

# 定义匹配函数
def find_matches(project_names):
    matches = []
    for group in project_list_1:
        matched = False
        # 遍历当前组的所有关键词
        for keyword in group:
            # 遍历当前行的所有项目名,检查是否包含关键词(不区分大小写)
            for project in project_names:
                if keyword.lower() in project.lower():
                    matches.append(group[0])
                    matched = True
                    break
            if matched:
                break
    # 无匹配时返回[None],否则返回匹配结果列表
    return matches if matches else [None]

# 应用函数到DataFrame
df['matches'] = df['project_names'].apply(find_matches)

# 查看结果
print(df)

输出结果

运行后得到的DataFrame如下:

project_names       matches
0  [Datalabor, test, tpuframework]  [labor, tpu]
1    [regETU, register, tpuframework]   [reg, tpu]
2                                  []        [None]
3           [gpuframework, cpuframework]        [gpu]

代码说明

  • 函数find_matches接收每行的project_names子列表作为输入
  • 外层循环遍历project_list_1的每个子组,内层循环检查子组关键词与项目名的匹配
  • 匹配时使用lower()统一大小写,确保不区分大小写的匹配逻辑
  • 找到匹配后立即跳出当前组的循环,避免重复匹配同一组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:42:57