Skip to main content
 首页 » 编程设计

python之对具有列表值的列使用 isin()

2025年05月04日12qlqwjy

我有两个数据框。 Dataframe A 有一列由 list ids(命名项)值组成。数据框 B 有一列 int id 值(命名为 id)。

数据框 A:

date       |    items 
2019-06-05 | [121, 123, 124] 
2019-06-06 | [109, 125] 
2019-06-07 | [108, 126] 

数据框 B:

name  | id 
item1 | 121 
item2 | 122 
item3 | 123 
item4 | 124 
item5 | 125 
item6 | 126 

我想过滤 Dataframe A 并只保留该行中 items 的所有值都存在于 Dataframe B 的 id 列中的行。

根据上面的例子,结果应该是:

数据框 C:

date       |    items 
2019-06-05 | [121, 123, 124] 

(因为 Dataframe B 没有 id==108 和 id==109 的行)

如果 items 是一个 int 列,我可以使用:

dataframe_a[dataframe_a.items.isin(dataframe_b.id)] 

如何在 list 列中实现这一点?

请您参考如下方法:

我们可以使用issubset

l=[set(x).issubset(dfb.id.tolist())for x in df['items']] 
Out[64]: [True, False, False] 

然后

df=df[l]