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

如何在Pandas中基于部分匹配条件创建新列?

错误原因分析
  • 初始apply写法:排除swifter适配问题的话,单条件下逻辑本身是可以运行的,报错大概率是你代码中额外加了any()判断——单个字符串传入any()会遍历每个字符,只要字符串非空就返回True,直接导致判断逻辑完全失效。
  • np.where写法报错:属于语法错误,你在语句末尾多了: return "Things"的无效内容,标准np.where语法不需要额外的return语句。你提到的「循环内无法生效」的问题,只要在循环内正确引用当前操作的DataFrame变量名即可,注意不要写错变量(比如示例里你定义的是df但调用时写的是df2)。
  • 补充的自定义函数写法错误:conditions函数既没有定义返回值,也没有接收正确的参数,直接把函数对象传给np.where当然会出现长度不匹配的问题。
  • 其他无效写法:df["new_column"] == "ores" is True: return "things"属于完全不符合Python语法的写法,Pandas没有这种直接赋值加判断的语句规则。
正确实现方案

方案1:矢量化实现(性能最优,无需apply)

单条件场景直接用一行代码即可,不需要自定义函数,完全适配循环内调用的场景,也不需要用np.select:

import pandas as pd
import numpy as np

df = pd.DataFrame([["ores"], ["ores + more texts"], ["anything else"]], columns=['Symptom'])
# 包含ores返回Things,不满足条件可以自定义返回其他值,比如空字符串
df["new_column"] = np.where(df["Symptom"].str.contains("ores", na=False), "Things", "")

这里的na=False是为了处理Symptom列存在空值的场景,避免判断时返回NaN报错。

方案2:apply自定义函数(适合多条件逻辑,方便编辑)

如果你有多个判断条件需要频繁修改,又不想维护独立的条件列表,可以用apply的标准写法,所有逻辑都收拢在函数内部,修改非常方便:

def conditions(row):
    if "ores" in row["Symptom"]:
        return "Things"
    # 后续新增条件直接加elif即可
    elif "test" in row["Symptom"]:
        return "其他返回值"
    # 不满足所有条件的默认返回值
    else:
        return ""

df["new_column"] = df.apply(conditions, axis=1)

如果要保留swifter加速,直接把df.apply改成df.swifter.apply即可,只要Symptom列没有非字符串类型的值就不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:15:03