Pandas如何基于期刊标题完全匹配新建Influential标记列
解决方案
问题原因
你之前使用的方法不符合完全匹配的需求:
str.contains()仅校验字符串是否包含目标子串,没有首尾位置限制,因此包含关键词的非目标条目也会被命中str.match()仅校验字符串开头是否匹配目标模式,不限制结尾,同样会匹配到开头符合、整体不符的条目
最优实现方式
不需要强制使用正则,pandas内置的isin()方法专门用于完全匹配列表元素的场景,代码更简洁高效:
# 先定义目标期刊列表 target_journals = [ "Blood", "Cancer", "Chest", "Circulation", "Diabetes", "JAMA", "Endocrinology", "Gastroenterology", "Gut", "Medicine", "Neurology", "Pediatrics", "Physical therapy", "Radiology", "Surgery", "Geriatrics" ] # 直接生成Influential列,匹配成功保留期刊名,不匹配则为NaN df['Influential'] = df['Title'].where(df['Title'].isin(target_journals))
正则实现方案(可选)
如果需要用正则实现,需要给匹配规则加上开头^和结尾$锚定,确保是完全匹配:
import re # 构造正则匹配规则,re.escape用于避免期刊名中的特殊字符影响正则逻辑 pattern = r'^(' + '|'.join(re.escape(j) for j in target_journals) + r')$' # 提取匹配结果 df['Influential'] = df['Title'].str.extract(pattern, expand=False)
两种方法都可以得到你期望的输出结果,优先推荐isin()方案,性能和可读性都更好。
内容的提问来源于stack exchange,提问作者Anakin Skywalker
相关产品推荐
相关产品推荐

