Pandas:过滤DataFrame列中嵌套列表值并匹配对应ID
处理嵌套列表的DataFrame匹配与过滤问题
问题背景
给定包含嵌套列表的DataFrame,需要完成以下操作:
- 提取每行
single_item_list中的目标值 - 在
multi_item_list中递归搜索该目标值(支持任意多层嵌套) - 仅保留
multi_item_list中的匹配项及对应层级结构 - 根据匹配项的位置,同步保留
multi_id中的对应值
原始代码无法处理嵌套列表场景,以下是完整解决方案。
原始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'],['ABC_123','ADC_123']],['XYZAV','DEF123','ABC_123','SAJKF'],['QWER12','FAS324'],['JFAJKA','HSJD123']], 'multi_id':[[[2167,2147,29481],[5432,1234]],[2313,57567,2321,7898],[1123,8775],[5237,43512]] })
解决方案
1. 递归匹配过滤函数
编写递归函数遍历嵌套列表,同步处理multi_item_list和multi_id,仅保留匹配项及对应ID:
def filter_nested_lists(target_item, item_list, id_list): filtered_items = [] filtered_ids = [] for item, id_val in zip(item_list, id_list): if isinstance(item, list): # 递归处理嵌套子列表,仅保留有匹配项的子结构 sub_items, sub_ids = filter_nested_lists(target_item, item, id_val) if sub_items: filtered_items.append(sub_items) filtered_ids.append(sub_ids) else: # 非列表元素直接匹配 if item == target_item: filtered_items.append(item) filtered_ids.append(id_val) return filtered_items, filtered_ids
2. 应用到DataFrame每行
使用apply方法逐行处理,生成过滤后的结果列:
def process_row(row): target = row['single_item_list'][0] filtered_items, filtered_ids = filter_nested_lists(target, row['multi_item_list'], row['multi_id']) return pd.Series({ **row.to_dict(), 'filtered_multi_item': filtered_items, 'filtered_multi_id': filtered_ids }) # 生成结果DataFrame result_df = sample_df.apply(process_row, axis=1)
3. 验证结果
查看过滤后的关键列:
print(result_df[['filtered_multi_item', 'filtered_multi_id']])
输出:
filtered_multi_item filtered_multi_id 0 [[ABC_123], [ABC_123]] [[29481], [1234]] 1 [DEF123] [57567] 2 [FAS324] [8775] 3 [HSJD123] [43512]
该方案支持任意多层嵌套列表的匹配,完全满足需求。
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

