我有一个DataFrame,其中一列包含字符串列表,像这样:
print(df_1.lists)
退出:
0 [Pucku, Byłam, Miruś, Funkcjonariusze]
1 [Greger, Pytam, Jana, Dopóki, Wiary]
2 [Baborowa, Chcę, Innym, Baborowie]
etc
还有另一个DataFrame,它在系列中包含单词:
print(df_2.check)
退出:
0 Olszany
1 Pucków
2 Baborowa
3 Studzionki
4 Pytam
5 Lasowice
etc
我想获取df_1.lists
的每一行,并检查列表是否包含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中的i]),但这太慢了。
答案 0 :(得分:5)
使用嵌套列表理解:
df_1['new'] = [[y for y in x if y in df_2['check'].values] for x in df_1['lists']]
或在设置和列表之间为每个值获取intersection
:
df_1['new'] = [list(set(x).intersection(df_2['check'])) for x in df_1['lists']]
各组之间类似intersection
:
s = set(df_2['check'])
df_1['new'] = [list(set(x).intersection(s)) for x in df_1['lists']]