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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:04