Pandas如何检查某列字符串是否存在于另一列对应行的逗号分隔文本中
错误原因
你原来的代码存在两个核心问题:
- 逻辑顺序颠倒:
x['Name B'] in x['Name A']是判断整个Name B的长字符串是否包含在Name A的短字符串中,显然不可能成立,所以返回全False - 没有拆分Name B的逗号分隔字符串:需要先把Name B按逗号拆分为独立的姓名列表,再做匹配
场景1:严格精确匹配(姓名完全一致才返回True)
适合要求姓名完全相同才判定为存在的场景,实现代码如下:
# 拆分Name B为列表,去除每个姓名前后的空格后,判断Name A是否在列表中 df['Name Check'] = df.apply(lambda x: x['Name A'] in [i.strip() for i in x['Name B'].split(',')], axis=1)
场景2:模糊子串匹配(满足你提供的期望输出结果)
从你给出的期望输出看,存在近似匹配需求:比如Name A为Nadi匹配Name B中的Nadia、Name A为George匹配Name B中的Georg,这种场景可以用如下实现:
def match_name(row): name_a = row['Name A'] # 拆分Name B并去除空格 name_b_list = [item.strip() for item in row['Name B'].split(',')] for name_b in name_b_list: # 双向子串判断,只要两个字符串互相为子串即判定匹配 if name_a in name_b or name_b in name_a: return True return False df['Name Check'] = df.apply(match_name, axis=1)
内容的提问来源于stack exchange,提问作者Ibrahim Ayoup
相关产品推荐
相关产品推荐

