如何使用Pandas Apply遍历嵌套列表并返回首个匹配项
解决Pandas中嵌套项目列表的匹配问题
要实现遍历嵌套项目列表,为DataFrame每行的project_names子列表返回对应嵌套子列表的首个匹配值,可以按以下步骤编写适配嵌套列表的apply函数:
核心逻辑
针对project_list_1中的每个子组:
- 检查当前行的
project_names是否存在包含该子组内任意关键词的项目(不区分大小写) - 一旦找到匹配,就将该子组的第一个元素加入结果列表
- 若所有子组都无匹配,则返回
[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
相关产品推荐
相关产品推荐

