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

如何判断DataFrame列值是否含指定列表元素并生成0/1标记列

嘿,这个需求太常见啦,我给你整理了几种实用的实现方式,你可以根据自己的数据规模和后续需求来选:

方法1:简洁高效的正则匹配法(首选)

Pandas的str.contains支持正则表达式,我们把列表里的元素用|拼接成匹配模式,就能一次性检查每行是否包含任一目标值,代码非常简洁:

import pandas as pd

lst = ["apple","peach","pear"]
# 把列表元素拼接成正则匹配规则
match_pattern = '|'.join(lst)
# 生成标记列:布尔值转成0/1
df['flag'] = df['x'].str.contains(match_pattern).astype(int)

小提示:

  • 如果你的x列有缺失值(NaN),记得用fillna(0)处理,避免出现空值:
    df['flag'] = df['x'].str.contains(match_pattern).fillna(0).astype(int)
    
  • 要忽略大小写的话,给str.contains加个case=False参数就行。
方法2:灵活自定义的apply法(适合复杂逻辑)

如果之后需要加更复杂的判断规则(比如匹配特定位置的字符、结合其他列逻辑),用apply自定义函数会更灵活:

def check_target(text):
    # 检查text是否包含列表里的任意元素
    return 1 if any(item in text for item in lst) else 0

df['flag'] = df['x'].apply(check_target)

⚠️ 注意:apply是逐行遍历操作,数据量很大的时候效率不如第一种方法,小数据集用着没问题。

方法3:附带匹配结果的提取法

如果你不仅要标记,还想知道每行具体匹配了哪个元素,这个方法可以一举两得:

# 提取匹配到的元素,没匹配到就返回NaN
df['matched_item'] = df['x'].str.extract(f'({"|".join(lst)})', expand=False)
# 根据是否有匹配结果生成0/1标记
df['flag'] = df['matched_item'].notna().astype(int)

这样你既得到了标记列,还能看到每行匹配的具体内容,适合需要进一步分析的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:30:44