如何在DataFrame中逐行匹配嵌套列表的多值并返回对应匹配结果
问题解决思路与代码实现
核心逻辑是先把DataFrame的所有单元格带上位置(行索引、列名)打平,再按嵌套列表的每组关键词分别检索匹配结果,步骤如下:
预处理说明
首先注意你的list_1里的部分值带尾空格(比如"xx "),而df里的值是不带空格的"xx",先统一做前后空格剔除,避免匹配失效。
具体实现步骤
- 第一步:把原DataFrame转换为带位置信息的长表
用melt方法保留原行索引,把所有列的单元格值展开,每条记录对应「原行号、列名、单元格值」三个信息:import pandas as pd # 先给原df加原行号列,避免melt后丢失行索引 df = df.reset_index(names='原行号') # 打平为长表 df_long = df.melt(id_vars='原行号', var_name='列名', value_name='单元格值') # 统一做空格剔除(如果不需要可以注释这行) df_long['单元格值'] = df_long['单元格值'].str.strip() - 第二步:遍历
list_1的每一组关键词,批量检索匹配结果
每组关键词可以直接用isin方法批量匹配,不用逐个遍历关键词:list_1 = [["xx ",'yy'], ["gg ",'xx'], ["xx ",'gg']] result = [] for idx, keywords in enumerate(list_1): # 先处理当前组关键词的空格 cleaned_keys = [k.strip() for k in keywords] # 匹配所有符合的记录 match_df = df_long[df_long['单元格值'].isin(cleaned_keys)].copy() match_df['匹配组编号'] = idx match_df['待匹配关键词组'] = str(keywords) result.append(match_df) # 合并所有匹配结果 final_result = pd.concat(result, ignore_index=True) - 第三步:结果导出
最终输出的final_result里每一行就是一个匹配结果,包含你需要的原行号、列名、匹配到的内容、对应的list_1组信息。如果需要按组拆分,直接按「匹配组编号」筛选即可。
结果验证
以你举的第一组关键词["xx ", "yy"]为例,匹配结果会对应:
- 原行号0,列名column1,单元格值xx
- 原行号1,列名column_N,单元格值yy
和你预期的结果完全一致。
内容的提问来源于stack exchange,提问作者redplanet
相关产品推荐
相关产品推荐

