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

Python Pandas中基于Pos_ID生成Emp_Type列结果全为'A'的问题

问题原因
  • 判断逻辑错误:你定义的manager、consult、ast是元组,但判断时用manager == code,这是拿整个元组和单个Pos_ID值比较,永远不会相等,所以所有分支都走到else,结果全是'A'。
  • 语法遗漏:for code in df['Pos_ID']后面缺少冒号:,如果实际运行没报错,应该是你输入时漏写了,但这是潜在语法问题。
解决方法

方法1:修正循环逻辑(不推荐,效率偏低)

把判断条件改成code in 元组的形式,补全语法:

manager = (11014,11015,11018,11024)
consult = (11013, 11017)
ast = (11016,11027)

Emp_Type = []
for code in df['Pos_ID']:
    if code in manager:
        Emp_Type.append('M')
    elif code in consult:
        Emp_Type.append('C')
    else:
        Emp_Type.append('A')
df['Emp_Type'] = Emp_Type

方法2:Pandas内置高效处理(推荐,适配5000+数据)

Pandas原生方法比Python循环快得多,适合批量数据处理,以下是几种常用方式:

方式A:字典映射 + map

先构建Pos_ID到员工类型的映射字典,再批量转换:

type_mapping = {
    11014: 'M', 11015: 'M', 11018: 'M', 11024: 'M',
    11013: 'C', 11017: 'C',
    11016: 'A', 11027: 'A'
}
# 用fillna处理不在映射列表中的值,默认设为'A'
df['Emp_Type'] = df['Pos_ID'].map(type_mapping).fillna('A')

方式B:replace批量替换

# 先替换经理和顾问的Pos_ID,未匹配的留空后填充为'A'
df['Emp_Type'] = df['Pos_ID'].replace({
    11014: 'M', 11015: 'M', 11018: 'M', 11024: 'M',
    11013: 'C', 11017: 'C'
})
df['Emp_Type'] = df['Emp_Type'].fillna('A')

方式C:numpy.where多层条件判断

import numpy as np

manager = (11014,11015,11018,11024)
consult = (11013, 11017)

df['Emp_Type'] = np.where(
    df['Pos_ID'].isin(manager), 'M',
    np.where(df['Pos_ID'].isin(consult), 'C', 'A')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:22:39