首页 > 解决方案 > pandas 用列表过滤列表

问题描述

如何获取所有“id”,其中“组合”列表中的元素与“搜索”列表中的任何元素匹配?

# setup df
d = {'id': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5},
    'combo': {0: ['a', 'b'], 1: ['a'], 2: ['c', 'd'], 3: ['c', 'e'], 4: ['d'], 5: ['c', 'f']}}
df = pd.DataFrame(d)

search = ['a','d']

以下工作,但我可以只得到一个 id 的列表作为 1 班轮 - 而不是写入数据帧

df['check'] = df.apply(lambda x: any(i in search for i in x['combo']), axis=1)
df['id'][(df['check'] == True)]

标签: pythonpandas

解决方案


尝试:

df.loc[df['combo'].explode().isin(search).any(level=0),'id']

输出:

0    0
1    1
2    2
4    4
Name: id, dtype: int64

推荐阅读