首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: For循环中的IF语句

Python: For循环中的IF语句
EN

Stack Overflow用户
提问于 2021-11-22 06:54:56
回答 2查看 61关注 0票数 0

我想创建一个新列,然后使用另一个参数作为条件来填充该列。

这是我的代码,它是如何继续到elif的。只应用第一个参数,即使它不符合我设置的参数。

代码语言:javascript
复制
for i in df_csrdata_2mos_Filtered_Done["Agent"]:
    if i == "unez" or i == "rmbua" or i == "destrada" or i == "amateo" or i == "cmabelison":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 1"
    elif i == "rverga" or i == "dpcaban" or i == "dgsugui":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 2"
    elif i == "gmic" or i == "jdera":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 3"
    elif i == "gras" or i == "mcsrra":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 4"
    elif i == "jcawan" or i == "rmcola" or i == "mjgamo":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 5"
    elif i == "ychaco" or i == "phondra":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 6"
    elif i == "mmorang" or i == "vsin":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 7"
    elif i == "pbong":
        df_csrdata_2mos_Filtered_Done["AgentTag"] = "Agent 8"
    else:
        print("AgentTag Done!")
EN

回答 2

Stack Overflow用户

发布于 2021-11-22 07:01:01

你的if/elif运行得很好。

基于df_,我假设您使用的是Pandas数据帧,在这种情况下,df_csrdata_2mos_Filtered_Done["AgentTag"] = "X"只是用一个新值替换了整个序列。

代码语言:javascript
复制
>>> df = pd.DataFrame({"a": [1, 2, 3]})
>>> df
   a
0  1
1  2
2  3
>>> df["b"] = "Agent Perry"
>>> df
   a            b
0  1  Agent Perry
1  2  Agent Perry
2  3  Agent Perry
>>>

如果最后一个Agent"pbong",则df中的所有AgentTags都将是代理8。

它看起来像是所有你正在寻找的带有字典的Series.map()

代码语言:javascript
复制
>>> agent_map = {
...     "unez": "Agent 1",
...     "rverga": "Agent 2",
... }
>>> df = pd.DataFrame({"agent": ["unez", "rverga", "hello"]})
>>> df
    agent
0    unez
1  rverga
2   hello
>>> df["AgentTag"] = df["agent"].map(agent_map)
>>> df
    agent AgentTag
0    unez  Agent 1
1  rverga  Agent 2
2   hello      NaN
>>>
票数 1
EN

Stack Overflow用户

发布于 2021-11-22 07:05:31

不要使用循环,这里没有必要。

更好的方法是使用Series.map进行映射

代码语言:javascript
复制
d = {
    "Agent 1": ["unez", "rmbua", "destrada", "amateo", "cmabelison"],
    "Agent 2": ["rverga", "dpcaban", "dgsugui"],
    "Agent 3": ["gmic", "jdera"],
    "Agent 4": ["gras", "mcsrra"],
    "Agent 5": ["jcawan", "rmcola", "mjgamo"],
    "Agent 6": ["ychaco", "phondra"],
    "Agent 7": ["mmorang", "vsin"],
    "Agent 8": ["pbong"],
}

# flatten lists
d1 = {k: oldk for oldk, oldv in d.items() for k in oldv}

df_csrdata_2mos_Filtered_Done["AgentTag"] = df_csrdata_2mos_Filtered_Done["Agent"].map(d1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70061930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档