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

Python如何从单列提取值并基于目标列生成独立的二进制标识列

解决方案

核心问题原因

原来的匹配逻辑是子串包含匹配,'name' in 'business name'返回结果为True,所以会出现误判。你需要的是对reason字段按分隔符拆分后,匹配完整的独立枚举值,即可解决该问题。

实现代码

所有需要生成的列和对应关键词只需要维护一个映射字典即可,后续新增字段无需修改核心逻辑,不需要手动创建十多个列表:

import pandas as pd

# 1. 定义关键词映射:键是生成的列名,值是对应要匹配的reason独立值
keyword_map = {
    "business_name": "business name",
    "name": "name",
    "individual_name": "individual_name",
    "DOB": "DOB"
}

# 2. 预处理reason字段,按逗号拆分、去空格、转小写后转集合,避免大小写、多余空格导致的匹配失败
df["reason_set"] = df["reason"].str.lower().str.split(r"\s*,\s*").apply(set)

# 3. 批量生成所有匹配列
for col_name, target_key in keyword_map.items():
    # 匹配时统一转小写,大小写不敏感
    df[col_name] = df["reason_set"].apply(lambda x: "Yes" if target_key.lower() in x else "No")

# 如果需要二进制0/1格式存储,把上面的"Yes"/"No"替换为1/0即可:
# df[col_name] = df["reason_set"].apply(lambda x: 1 if target_key.lower() in x else 0)

# 可选:删除中间生成的辅助列reason_set
df = df.drop("reason_set", axis=1)

效果验证

以上代码运行后输出结果和你给出的期望效果完全一致:

reasonbusiness_namenameindividual_nameDOB
business nameYesNoNoNo
nameNoYesNoNo
business nameYesNoNoNo
individual_nameNoNoYesNo
DOBNoNoNoYes
Business name,nameYesYesNoNo

内容的提问来源于stack exchange,提问作者one_random_python_learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:06:02