Python For循环内嵌套IF语句为Pandas DataFrame新增列时elif不执行
问题根源
你代码的核心问题出在赋值逻辑上:
- 遍历
Agent列的每个值时,每次赋值都是直接修改整个AgentTag列,而非修改当前遍历对应的行。假设第一个遍历到的Agent值属于第一组,整个列会被直接全部设为Agent 1,就算后续遍历到其他组的Agent值,后续的赋值也会覆盖全列,最终全列的值由最后一个遍历到的Agent值所属分组决定,看起来就像只走了第一个分支。 - 其次这种逐行遍历的写法在pandas中效率极低,数据量稍大就会非常慢,完全没必要用循环实现。
正确实现方案
方案1:字典映射(最简洁,推荐)
先构造Agent到AgentTag的映射字典,直接用map方法生成新列:
# 构造映射关系 agent_map = { "unez": "Agent 1", "rmbua": "Agent 1", "destrada": "Agent 1", "amateo": "Agent 1", "cmabelison": "Agent 1", "rverga": "Agent 2", "dpcaban": "Agent 2", "dgsugui": "Agent 2", "gmic": "Agent 3", "jdera": "Agent 3", "gras": "Agent 4", "mcsrra": "Agent 4", "jcawan": "Agent 5", "rmcola": "Agent 5", "mjgamo": "Agent 5", "ychaco": "Agent 6", "phondra": "Agent 6", "mmorang": "Agent 7", "vsin": "Agent 7", "pbong": "Agent 8" } # 生成新列 df_csrdata_2mos_Filtered_Done["AgentTag"] = df_csrdata_2mos_Filtered_Done["Agent"].map(agent_map) print("AgentTag Done!")
未匹配到的Agent对应行的AgentTag会自动设为NaN,可后续按需填充默认值。
方案2:np.select(适合条件更复杂的场景)
如果后续分组逻辑需要调整得更复杂,可以用numpy的select方法实现:
import numpy as np # 定义条件列表 conditions = [ df_csrdata_2mos_Filtered_Done["Agent"].isin(["unez", "rmbua", "destrada", "amateo", "cmabelison"]), df_csrdata_2mos_Filtered_Done["Agent"].isin(["rverga", "dpcaban", "dgsugui"]), df_csrdata_2mos_Filtered_Done["Agent"].isin(["gmic", "jdera"]), df_csrdata_2mos_Filtered_Done["Agent"].isin(["gras", "mcsrra"]), df_csrdata_2mos_Filtered_Done["Agent"].isin(["jcawan", "rmcola", "mjgamo"]), df_csrdata_2mos_Filtered_Done["Agent"].isin(["ychaco", "phondra"]), df_csrdata_2mos_Filtered_Done["Agent"].isin(["mmorang", "vsin"]), df_csrdata_2mos_Filtered_Done["Agent"] == "pbong" ] # 定义对应结果 choices = ["Agent 1", "Agent 2", "Agent 3", "Agent 4", "Agent 5", "Agent 6", "Agent 7", "Agent 8"] # 生成新列,可修改default参数设置未匹配项的默认值 df_csrdata_2mos_Filtered_Done["AgentTag"] = np.select(conditions, choices, default=np.nan) print("AgentTag Done!")
内容的提问来源于stack exchange,提问作者COCO
相关产品推荐
相关产品推荐

