检查列表中的元素之一是否在数据框列中

Check if one of elements in list is in dataframe column

我的 DF 如下所示:

columna_1   column_2
1           I am Thomas
2           Are you Thomas
3           How are you?
4           I am fine...
5           Jack, what's up?

我有一个这样的列表:

names = ["Thomas", "Jack"]

我需要的是从列表名称中查找值(如果 column_2 中有),如果有,它应该使用列表中的值添加新列。所以应该是这样的:

columna_1   column_2          column_3
1           I am Thomas       Thomas
2           Are you Thomas    Thomas
5           Jack, what's up?  Jack

我刚开始只查找值,但不确定如何添加具有正确值的新列。下面是我的代码:

df[df['column_2'].astype("str").apply(lambda x: set(names).issubset(x))]

你有什么想法吗?感谢您的帮助!

使用正则表达式:

import re
regex = fr'\b({"|".join(map(re.escape, names))})\b'
df['column_3'] = df['column_2'].str.extract(regex, expand=False)

同时删除不匹配项:

import re
regex = fr'\b({"|".join(map(re.escape,names))})\b'
(df.assign(column_3=df['column_2'].str.extract(regex, expand=False))
   .dropna(subset=['column_3'])
)

输出:

   columna_1          column_2 column_3
0          1       I am Thomas   Thomas
1          2    Are you Thomas   Thomas
4          5  Jack, what's up?     Jack

注意。请注意,如果 Thomas 和 Jack 都在句子中,则只有句子中的第一个匹配