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

Pandas查找含列表的列匹配查询元素对应列值报KeyError

报错根因

df.set_index('Col1').loc[query]的逻辑和需求完全不匹配:这段代码会把Col1设为行索引后,直接从索引中查找值为watermelon、grape的行,但Col1存储的是人名,不存在这两个值,必然触发KeyError。
你的实际需求是筛选Col2列的列表中包含query列表任意元素的行,再提取对应Col1的值,直接走索引匹配的思路从一开始就错了。

可直接运行的实现代码

写法1:直观易读(小数据量推荐)

用集合交集判断每行的Col2是否包含query中的元素,逻辑直白好维护:

import pandas as pd

df = pd.DataFrame({'Col1': ['Jack', 'Mary', 'Andrew'], 
                   'Col2': [['apple', 'banana', 'papaya', 'tomato'],['berry', 'juice', 'watermelon'], ['cabbage', 'grape']]})
query = ['watermelon', 'grape']

# 筛选符合条件的行,仅保留Col1列并重排索引
res = df[df['Col2'].apply(lambda cell: bool(set(cell) & set(query)))][['Col1']].reset_index(drop=True)
print(res)

运行输出完全匹配预期:

Col1
0    Mary
1  Andrew

写法2:高性能写法(大数据量推荐)

用explode把Col2的列表拆成单行单元素再做匹配,比apply循环速度快很多:

res = df.explode('Col2').query("Col2 in @query").drop_duplicates('Col1')[['Col1']].reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:16:03