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

如何筛选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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:51:02