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

Python中基于字符串值差异识别正式经理与代理经理

解决DataFrame新增Status列的逻辑问题

问题梳理

需要给DataFrame新增Status列,规则如下:

  • 当Emp_Level为Emp时,Status为Emp
  • 当Emp_Level为Mgr时:
    • 若Name包含(Stand in),Status为Partial
    • 否则Status为Full

原代码的问题

你写的代码有三个关键错误:

  1. 正则转义问题:(Stand in)里的括号是正则的特殊字符,默认str.contains启用正则模式,导致无法正确匹配包含(Stand in)的名称
  2. 拼写错误:把Partial写成了Partical
  3. 逻辑与输出值不符:嵌套顺序错误,而且输出的Manager/Employee和期望的Full/Emp不匹配

修正后的代码

方法1:修正np.where逻辑

import pandas as pd
import numpy as np

# 构造原始数据
data = {
    'ID': [101, 102, 103, 104, 105, 106],
    'Name': ['Adam', 'Betty', 'Chris(Stand in)', 'Dave', 'Emily(Stand in)', 'Frank'],
    'Emp_Level': ['Emp', 'Mgr', 'Mgr', 'Emp', 'Mgr', 'Mgr']
}
df = pd.DataFrame(data)

# 新增Status列
df['Status'] = np.where(
    df['Name'].str.contains('\(Stand in\)', regex=True),  # 转义括号以匹配字面量
    'Partial',
    np.where(
        df['Emp_Level'] == 'Mgr',
        'Full',
        'Emp'
    )
)

print(df)

或者更简单的方式,直接关闭正则模式(匹配字面量的(Stand in)):

df['Status'] = np.where(
    df['Name'].str.contains('(Stand in)', regex=False),
    'Partial',
    np.where(df['Emp_Level'] == 'Mgr', 'Full', 'Emp')
)

方法2:用apply自定义逻辑(更直观)

def get_status(row):
    if row['Emp_Level'] == 'Emp':
        return 'Emp'
    elif '(Stand in)' in row['Name']:
        return 'Partial'
    else:
        return 'Full'

df['Status'] = df.apply(get_status, axis=1)

输出结果

执行后会得到你期望的结果:

ID               Name Emp_Level  Status
0  101               Adam       Emp     Emp
1  102              Betty       Mgr    Full
2  103  Chris(Stand in)       Mgr  Partial
3  104               Dave       Emp     Emp
4  105  Emily(Stand in)       Mgr  Partial
5  106              Frank       Mgr    Full

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:33