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

Sae*_*ili 3 python pandas

我有两个数据框。数据框 A 有一个由listids(命名项)值组成的列。数据框 B 有一列intids 值(名为 id)。

数据框A:

date       |    items
2019-06-05 | [121, 123, 124]
2019-06-06 | [109, 125]
2019-06-07 | [108, 126]
Run Code Online (Sandbox Code Playgroud)

数据框B:

name  | id
item1 | 121
item2 | 122
item3 | 123
item4 | 124
item5 | 125
item6 | 126
Run Code Online (Sandbox Code Playgroud)

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

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

数据框C:

date       |    items
2019-06-05 | [121, 123, 124]
Run Code Online (Sandbox Code Playgroud)

(因为数据框 B 没有 id==108 和 id==109 的行)

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

date       |    items
2019-06-05 | [121, 123, 124]
2019-06-06 | [109, 125]
2019-06-07 | [108, 126]
Run Code Online (Sandbox Code Playgroud)

我怎样才能在list专栏中实现这一目标?

WeN*_*Ben 5

我们可以使用issubset

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

然后

df=df[l]
Run Code Online (Sandbox Code Playgroud)