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

如何判断DataFrame单元格包含指定值并按条件填充对应字段

实现代码

方法1:使用numpy.select实现(兼容性最佳)

import pandas as pd
import numpy as np

# 构造示例数据,你可以替换为自己的实际数据源
df = pd.DataFrame({
    'Column_1': [
        'ABC DEF EFG HIJ',
        'ZCG VHT UIO QAR',
        'ABC KLM MNO STU',
        'DEF KLM ABD EFG'
    ]
})

# 定义匹配条件和对应返回值
conditions = [
    df['Column_1'].str.contains(r'\bABC\b') & ~df['Column_1'].str.contains(r'\bKLM\b'),
    ~df['Column_1'].str.contains(r'\bABC\b') & df['Column_1'].str.contains(r'\bKLM\b'),
    df['Column_1'].str.contains(r'\bABC\b') & df['Column_1'].str.contains(r'\bKLM\b')
]
values = [1, 2, 3]

# 赋值结果,未匹配到上述条件的默认返回4
df['Column_1'] = np.select(conditions, values, default=4)

print(df)

输出结果和预期完全一致:

Column_1
0         1
1         4
2         3
3         2

方法2:使用pandas原生case_when实现(pandas 1.4.0及以上版本支持)

如果你的pandas版本足够高,可以用更简洁的原生语法实现:

df['Column_1'] = df['Column_1'].case_when(
    [
        lambda x: x.str.contains(r'\bABC\b') & ~x.str.contains(r'\bKLM\b'), 1,
        lambda x: ~x.str.contains(r'\bABC\b') & x.str.contains(r'\bKLM\b'), 2,
        lambda x: x.str.contains(r'\bABC\b') & x.str.contains(r'\bKLM\b'), 3
    ],
    default=4
)

注意事项

代码里的r'\bABC\b'使用了正则单词边界匹配,确保只会匹配空格分隔的独立ABC单词,避免匹配到类似XABC、ABC1这类包含ABC子串的内容造成误判。如果你的场景不需要严格匹配独立单词,直接把r'\b'去掉,写str.contains('ABC')即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:30:05