熊猫-如何检查DF行中的字符串列表是否包含另一个DF中的任何串联字符串?

Mik*_*ajM 4 python pandas

我有DataFrame在其中一列中包含字符串列表,就像这样:

print(df_1.lists)
Run Code Online (Sandbox Code Playgroud)

出:

0      [Pucku, By?am, Miru?, Funkcjonariusze]
1      [Greger, Pytam, Jana, Dopóki, Wiary]
2      [Baborowa, Chc?, Innym, Baborowie]
etc
Run Code Online (Sandbox Code Playgroud)

我还有另一个DataFrame,它在系列中包含单词:

print(df_2.check)
Run Code Online (Sandbox Code Playgroud)

出:

0                   Olszany
1                    Pucków
2                  Baborowa
3                Studzionki
4                     Pytam
5                  Lasowice
etc
Run Code Online (Sandbox Code Playgroud)

我想使用的每一行,df_1.lists并检查list是否包含中的任何单词df_2.check。如果包含,那么我想将这些包含的单词分配给中的列df_1.lists。怎么做?

[编辑]我为我尝试了df_1.lists.apply(lambda x:[list(set(df_2.checks.str.extract(r“(” + i + r“)”)。dropna()。values)) x]),但这太慢了。

jez*_*ael 6

使用嵌套列表理解:

df_1['new'] = [[y for y in x if y in df_2['check'].values] for x in df_1['lists']]
Run Code Online (Sandbox Code Playgroud)

intersection在set和list之间获取每个值:

df_1['new'] = [list(set(x).intersection(df_2['check'])) for x in df_1['lists']]
Run Code Online (Sandbox Code Playgroud)

intersection组间相似:

s = set(df_2['check'])
df_1['new'] = [list(set(x).intersection(s)) for x in df_1['lists']]
Run Code Online (Sandbox Code Playgroud)