Pandas实现DataFrame列与列表精确匹配并新增布尔标记列
Pandas 字段精确匹配标记列实现方案
要求严格整串匹配、通过正则实现的需求,不需要遍历拼接字符串,直接构造带首尾边界锚点的正则规则,即可直接为DataFrame生成匹配标记列,完全避免子串误判问题。
核心实现代码
import pandas as pd # 初始化示例数据 data = { "properties": ["FinancialOffice","Gas Station", "Office", "K-12 School"], } df = pd.DataFrame(data) proplist = ["Office","Other - Mall","Gym"] # 构造精确匹配正则规则 # ^ 匹配字符串开头,$ 匹配字符串结尾,强制整串完全匹配 # pd.regex.escape 自动转义待匹配词中的正则特殊字符,避免特殊符号导致匹配异常 match_pattern = r'^(?:' + '|'.join(map(pd.regex.escape, proplist)) + r')$' # 生成布尔类型标记列,空值默认标记为False df['flag'] = df['properties'].str.contains(match_pattern, regex=True, na=False)
效果说明
运行上述代码后输出的DataFrame完全符合预期:
properties flag 0 FinancialOffice False 1 Gas Station False 2 Office True 3 K-12 School False
可选格式调整
- 如果需要0/1格式的数字标记,把flag列生成代码替换为:
df['flag'] = df['properties'].str.contains(match_pattern, regex=True, na=False).astype(int) - 如果需要示例中大写的TRUE/FALSE字符串标记,把flag列生成代码替换为:
df['flag'] = df['properties'].str.contains(match_pattern, regex=True, na=False).map({True: 'TRUE', False: 'FALSE'})
注意:不要省略正则中的
^和$锚点,否则会退化为子串匹配,出现FinancialOffice包含Office被误判为匹配的问题。
内容的提问来源于stack exchange,提问作者Tahsin Alam
相关产品推荐
相关产品推荐

