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

Pandas:从列表列取值匹配另一列表列并过滤对应数据

解决Pandas DataFrame的列表匹配与过滤问题

原始DataFrame结构

import pandas as pd

sample_df = pd.DataFrame({'single_proj_name': [['jsfk'],['fhjk'],['ERRW'],['SJBAK']],
                          'single_item_list': [['ABC_123'],['DEF123'],['FAS324'],['HSJD123']],
                          'single_id':[[1234],[5678],[91011],[121314]],
                          'multi_proj_name':[['AAA','VVVV','SASD'],['QEWWQ','SFA','JKKK','fhjk'],['ERRW','TTTT'],['SJBAK','YYYY']],
                          'multi_item_list':[['XYZAV','ADS23','ABC_123'],['XYZAV','DEF123','ABC_123','SAJKF'],['QWER12','FAS324'],['JFAJKA','HSJD123']],
                          'multi_id':[[2167,2147,29481],[2313,57567,2321,7898],[1123,8775],[5237,43512]]})

需求说明

  • 提取每行single_item_list列中的值
  • 在同一行的multi_item_list列中搜索该值
  • 若找到匹配项,仅保留multi_item_list中的该匹配值,移除其他非匹配值
  • 根据匹配项的位置,在multi_id列表中保留对应位置的值,移除其他位置的值

尝试的错误代码

def func(df):
    return list(set(sample_df['single_item_list']) - set(sample_df['multi_item_list']))

sample_df['col3'] = sample_df.apply(func, axis = 1)

错误原因分析

  1. 函数错误引用全局的sample_df,而非当前行的df参数
  2. 转集合操作会丢失列表的位置信息,无法对应到multi_id的匹配位置
  3. 代码逻辑是求集合差集,与“保留匹配项”的需求完全相反

正确解决方案

自定义行处理函数,通过遍历找到匹配项的位置,再对multi_item_list和multi_id做定向过滤:

def filter_matches(row):
    # 提取当前行single_item_list的目标值(每行都是单元素列表)
    target_item = row['single_item_list'][0]
    # 获取当前行的多元素列表数据
    multi_items = row['multi_item_list']
    multi_ids = row['multi_id']
    
    # 找出所有匹配项的索引位置
    match_indices = [i for i, item in enumerate(multi_items) if item == target_item]
    
    # 根据索引过滤列表
    filtered_items = [multi_items[i] for i in match_indices]
    filtered_ids = [multi_ids[i] for i in match_indices]
    
    # 更新当前行的对应列
    row['multi_item_list'] = filtered_items
    row['multi_id'] = filtered_ids
    return row

# 应用函数到每行
result_df = sample_df.apply(filter_matches, axis=1)

最终输出结果

处理后的result_df内容如下:

single_proj_namesingle_item_listsingle_idmulti_proj_namemulti_item_listmulti_id
['jsfk']['ABC_123'][1234]['AAA', 'VVVV', 'SASD']['ABC_123'][29481]
['fhjk']['DEF123'][5678]['QEWWQ', 'SFA', 'JKKK', 'fhjk']['DEF123'][57567]
['ERRW']['FAS324'][91011]['ERRW', 'TTTT']['FAS324'][8775]
['SJBAK']['HSJD123'][121314]['SJBAK', 'YYYY']['HSJD123'][43512]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:30:41