检查列表中的元素之一是否在数据框列中
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 都在句子中,则只有句子中的第一个匹配
我的 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 都在句子中,则只有句子中的第一个匹配