You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:36:27