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

如何基于列值开头条件在DataFrame中创建自定义列?

基于Error列内容创建Error Type列的最优解法

首先先确认你的DataFrame结构(按你提供的内容整理成表格):

Person NumberErrorDepartment NameEmailCountry
CZ10054609The identifier 11380151 is used by Veronika Fi...CZ:Supply Chain Pohořelice 1 Henkel Cosmeticos...verca.fialova.2001@gmail.com
CZ10054620The identifier 11380126 is used by Radmila Val...CZ:Supply Chain Pohořelice 1 Henkel VAS (CZM63...rvalova1@seznam.cz
CZ10054728The identifier 11805326 is used by Pavel Pecka...CZ:Supply Chain Pohořelice 3 Levis (CZM630.415...pavlias000@seznam.cz
CZ10054699The identifier 11380232 is used by Sabina Love...CZ:Supply Chain Pohořelice 3 Marks and Spencer...s.loveckova@seznam.cz
CZ10054727The identifier 11805358 is used by Tereza Holč...CZ:Supply Chain Pohořelice 3 Levis (CZM630.415...tholcapko@seznam.cz

(注:看起来你提供的列名可能有点错位——问题里提到要判断Error列的开头,但表格里的Error列是数字,实际错误描述在Department Name列?如果是这样的话,把代码里的df['Error']换成df['Department Name']就行,核心逻辑不变)

回到问题本身,最优的解决方式是用Pandas矢量化字符串操作,相比逐行遍历的方法,这种方式在处理大数据集时效率高得多,也是Pandas官方推荐的做法:

方法1:str.startswith + np.where(最推荐)

这种写法直观且高效,适合你的两种判断场景:

import pandas as pd
import numpy as np

# 假设你的DataFrame名为df,注意:如果错误文本在其他列,替换成对应的列名,比如df['Department Name']
df['Error Type'] = np.where(
    # 第一个条件:Error列以"The identifier"开头,case=False可选,用来忽略大小写
    df['Error'].str.startswith('The identifier', case=False),
    'Duplicated',
    # 嵌套第二个条件:如果不符合第一个,判断是否以"The data"开头
    np.where(
        df['Error'].str.startswith('The data', case=False),
        'Transaction',
        np.nan  # 不符合两种情况的默认值,可改成'Other'之类的自定义值
    )
)

方法2:自定义映射函数(适合扩展更多错误类型)

如果之后可能需要新增更多错误类型的判断,你可以先写一个简单的映射函数,再用map或者apply处理:

def determine_error_type(error_msg):
    if error_msg.startswith('The identifier'):
        return 'Duplicated'
    elif error_msg.startswith('The data'):
        return 'Transaction'
    else:
        return np.nan  # 默认值

df['Error Type'] = df['Error'].map(determine_error_type)

不过要注意,map本质是逐行处理数据,当你的DataFrame行数很多(比如十万+)时,效率会比第一种矢量化方法低不少,所以优先选第一种。

小提示

  • 如果需要忽略大小写判断(比如有些行的错误文本是小写开头),记得给str.startswith加上case=False参数。
  • 对于不满足两种条件的行,默认用np.nan标记,你可以根据实际需求改成其他值,比如'Uncategorized'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:03:12