带有列表的熊猫过滤列表

时间:2021-04-13 19:41:55

标签: python pandas

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

SELECT *
FROM (
  SELECT *, DENSE_RANK() OVER (ORDER BY DATE(timer) DESC) rnk
  FROM tablename
) t
WHERE rnk <= 3

以下有效,但我可以将 id 列表作为 1 行而不是写入数据框

# 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']

3 个答案:

答案 0 :(得分:1)

试试:

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

输出:

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

答案 1 :(得分:1)

试试

out = df.id[pd.DataFrame(df.combo.tolist()).isin(['a','d']).any(1).values]
Out[61]: 
0    0
1    1
2    2
4    4
Name: id, dtype: int64

答案 2 :(得分:1)

您可以使用set()

ids = df.id[df.combo.apply(lambda x: bool(set(x).intersection(search)))]
print(ids)

打印:

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