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

如何从Pandas DataFrame中筛选列值属于指定列表的子集?

解决Pandas DataFrame按列表元素筛选行的问题

没问题,我来帮你搞定这个筛选需求!先明确下你的场景:我们有一个包含列表类型列的DataFrame,需要筛选出该列元素存在于指定列表中的行。

先还原原始数据

首先把你的初始数据用代码还原出来:

import pandas as pd

df = pd.DataFrame({'a':[[20,21],[22,19],[30,27]], 'b':[22,13,7]})
members = [[20,21],[18,21],[15,18]]

方法一:高效筛选(推荐)

因为列表是不可哈希的,直接用isin()会报错,所以我们可以把列表转成元组(元组是可哈希类型),再用集合来提升查找效率:

# 将members转换为元组集合,加快查找速度
members_tuple_set = set(tuple(item) for item in members)
# 对df的a列元素转成元组,再判断是否在集合中
df1 = df[df['a'].apply(tuple).isin(members_tuple_set)]

方法二:直接判断(适合小数据量)

如果你的数据量不大,也可以直接用apply结合lambda表达式判断元素是否在members里:

df1 = df[df['a'].apply(lambda x: x in members)]

验证结果

运行以上任意一种方法后,打印df1就能得到你想要的结果:

print(df1)
# 输出:
#           a   b
# 0  [20, 21]  22

小提示

推荐用第一种方法,因为集合的查找时间复杂度是O(1),而直接在列表中查找是O(n),当你的members列表或者DataFrame行数很多时,第一种方法的效率会高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:29:24