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

Python如何基于多列规则生成新列Sponsor

解决DataFrame新增Sponsor列的问题

需求与现有数据

需要给DataFrame新增一列Sponsor,值的生成规则如下:

  • 当Program为"A"或"B",且Source列包含"Global"时,取值为Owner列的内容
  • 其余情况取值为Source列的内容

现有原始数据:

Program    Source      Region  Owner
    A       Global        ECAN   Girl
    B       Regional       US    Boy
    C       Delta Global  EMEA   Girl 

原代码存在的问题

你写的代码有几个明显错误:

  1. Python字符串没有contains方法,判断子串是否存在应该用'Global' in row['Source']
  2. 逻辑运算符使用错误:Python里逻辑与/或要用and/or,&/|是位运算符,不适合这里的逻辑判断
  3. 逻辑优先级错误:原代码未给(row['Program'] == 'A') | (row['Program'] == 'B')加括号,会导致逻辑判断顺序出错,应该先判断Program是否为A或B,再和Source的条件做与运算
  4. 代码格式错误:else块的return语句没有缩进,不符合Python语法规范

修正后的代码方案

方案1:修正原有apply方法

针对原代码的错误逐一修正:

def SetSponsor(row):
    if (row['Program'] == 'A' or row['Program'] == 'B') and 'Global' in row['Source']:
        return row['Owner']
    else:
        return row['Source']
                
df['Sponsor'] = df.apply(SetSponsor, axis=1)

方案2:矢量化操作(推荐)

逐行apply的效率较低,推荐用pandas和numpy的矢量化方法实现,运行速度更快:

import numpy as np

# 构建符合规则的布尔条件
condition = df['Program'].isin(['A', 'B']) & df['Source'].str.contains('Global')
# 根据条件赋值
df['Sponsor'] = np.where(condition, df['Owner'], df['Source'])

最终结果

运行上述代码后,DataFrame会新增Sponsor列,结果如下:

Program    Source      Region  Owner  Sponsor
    A       Global        ECAN   Girl     Girl
    B       Regional       US    Boy  Regional
    C       Delta Global  EMEA   Girl  Delta Global

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:21:02