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

Pandas按字符串包含子串条件为DataFrame新增条件列

问题原因

你的代码存在两个核心错误,导致结果不符合预期:

  • 判断逻辑维度错误:xxx in df[col].values是判断整个列中是否存在某个单元格完全等于目标字符串,不是判断每个单元格的内容是否包含目标子串,且返回的是单个全局布尔值,无法实现逐行判断。
  • 赋值逻辑错误:用原生if/elif/else分支给列赋值时,只会进入其中一个分支,给整列所有行赋同一个固定值,不可能实现不同行返回不同结果的效果。
正确实现代码

使用pandas内置的字符串向量化方法逐行匹配,执行效率远高于逐行循环,逻辑清晰可维护:

# 定义两个判定条件
# 条件1:Type列包含'SUP - SDM',且Info列包含'Suppression total'
cond_1 = df["Type"].str.contains("SUP - SDM", na=False) & df["Info"].str.contains("Suppression total", na=False)
# 条件2:Type列包含'Franc SUP - Geisi',且Info列包含'Suppression partiel'
cond_2 = df["Type"].str.contains("Franc SUP - Geisi", na=False) & df["Info"].str.contains("Suppression partiel", na=False)

# 先给所有行默认赋值Fail,再把满足任意一个条件的行改为Correct
df["check"] = "Fail"
df.loc[cond_1 | cond_2, "check"] = "Correct"

代码中na=False参数用于处理列中存在空值的情况,避免空值导致判定结果异常。

注意事项

你提供的样例数据中第一行Info字段值为Suppression totale(法语拼写,末尾多了字母e),如果你的真实数据确实是这个拼写,需要把条件1里的Suppression total修改为Suppression totale,否则第一行会被判定为Fail。
运行修正匹配字符后的代码,即可得到预期结果:第一行、第四行check值为Correct,其余行为Fail。

小提示:如果需要做更灵活的字符串匹配,也可以在str.contains()中传入正则表达式实现复杂规则判定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:45:42