pandas - 检查是否在另一列中找到了一次列中的字符串之一
问题描述
我试图通过创建新列来检查列中的字符串之一是否在列Name B
中找到:Name A
Name Check
电流输入:
df = pd.DataFrame({"Name A":{"0":"John","1":"Sara","2":"Adam","3":"Ahmed"},
"Name B":{"0":"John, Geroge","1":"Ahemed, Sara","2":"Adam, Nadia","3":"Sara, John"},
"Salary":{"0":100,"1":200,"2":300,"3":400}})
Name A Name B Salary
0 John John, Geroge 100
1 Sara Ahemed, Sara 200
2 Adam Adam, Nadia 300
3 Ahmed Sara, John 400
例外输出:
Name A Name B Salary Name Check
0 John John, Geroge 100 True
1 Sara Ahemed, Sara 200 True
2 Adam Adam, Nadia 300 True
3 Ahmed Sara, John 400 False
4 Nadi Sara, Nadia 500 True
5 George Georg, Mo 600 True
我尝试过的:
df['Name Check'] = df.apply(lambda x: x['Name B'] in x['Name A'] , axis=1)
但是输出都是False,不知道如何将 column 转换Name B
为 list 并循环检查是否在 column 中找到Name A
。
解决方案
这是一种使用带有单词边界的正则表达式的方法:
import re
df.apply(lambda r: bool(re.search(r'\b%s\b' % r['Name A'], r['Name B'])), axis=1)
说明:这为表单的每行定义了一个正则表达式\bJohn\b
,以确保完成完全匹配