如何获取所有“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']
答案 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