如何筛选pandas DataFrame中列表列与指定列表存在交集的行
解决方案
你之前报错是因为直接对整个position列做集合运算,没有逐行处理,使用以下两种方法都可以实现需求:
方法1:apply逐行判断(适合小数据量)
核心逻辑是逐行取球员位置列表和目标列表的交集,交集非空即符合筛选条件:
import pandas as pd # 示例数据构造 players = pd.DataFrame({ "name": ['Alex Ovechkin', 'Leon Draisaitl', 'Evander Kane', 'Sydney Crosby'], "position": [['LW'], ['C', 'LW'], ['LW', 'RW'], ['C']], }) positions_to_see = ['LW','RW'] # 筛选代码 result = players[players['position'].apply(lambda x: bool(set(x) & set(positions_to_see)))]
方法2:explode展开匹配(适合大数据量,性能更高)
先把position列的列表拆分为单行单元素,匹配后按原始索引聚合,只要有一个位置符合要求就保留:
result = players[players['position'].explode().isin(positions_to_see).any(level=0)]
如果你的pandas版本不支持any(level=0)写法,可以替换为.groupby(level=0).any(),效果一致。
输出结果
两种方法得到的结果一致,会自动排除仅能胜任C位置的球员:
name position 0 Alex Ovechkin [LW] 1 Leon Draisaitl [C, LW] 2 Evander Kane [LW, RW]
内容的提问来源于stack exchange,提问作者Craig Hamilton
相关产品推荐
相关产品推荐

