You need to enable JavaScript to run this app. Pandas实现Campaign列双关键词匹配新增Degree列的正确方法
优惠活动
大模型
产品
解决方案
定价
更多

Pandas实现Campaign列双关键词匹配新增Degree列的正确方法

正确实现方案

首先梳理原代码的核心问题:

  • 逐行循环时x是Campaign列的单个字符串值,不存在str方法,str.contains()是pandas Series的专属方法,不能直接作用在单个字符串上
  • 用'General' and 'PHD'判断双关键词的写法存在逻辑错误,受Python短路逻辑影响,实际只会判断PHD是否存在
  • 赋值时误用双等号==,属于比较运算符而非赋值操作
  • 循环内直接对整列DataFrame赋值的逻辑无法实现逐行判断效果,还会大幅降低运行效率

推荐方案:向量化写法(运行效率高,适合大尺寸DataFrame)

import pandas as pd
import numpy as np

# 提取Campaign列的字符串序列
campaign = data['Campaign']
# 初始化新列Degree,默认填充np.nan
data['Degree'] = np.nan

# 逐条件匹配符合规则的行,填充对应值
# na=False的作用是将空值位置判定为不匹配,避免空值触发报错
data.loc[campaign.str.contains('General', na=False) & campaign.str.contains('PHD', na=False), 'Degree'] = 'PHD'
data.loc[campaign.str.contains('General', na=False) & campaign.str.contains('BS', na=False), 'Degree'] = 'BS'
data.loc[campaign.str.contains('General', na=False) & campaign.str.contains('MS', na=False), 'Degree'] = 'MS'

备选方案:逐行循环写法(适合逻辑较复杂的自定义判断场景)

import numpy as np

# 初始化空列表存储每行的判断结果
degree_res = []
# 逐行遍历Campaign列的取值
for item in data['Campaign']:
    # 转换为字符串避免空值触发in判断报错
    item_str = str(item)
    if ('General' in item_str) and ('PHD' in item_str):
        degree_res.append('PHD')
    elif ('General' in item_str) and ('BS' in item_str):
        degree_res.append('BS')
    elif ('General' in item_str) and ('MS' in item_str):
        degree_res.append('MS')
    else:
        degree_res.append(np.nan)

# 将判断结果赋值给新的Degree列
data['Degree'] = degree_res

注意事项

  • 若存在某行同时匹配多个条件(例如Campaign值为"General PHD BS"),代码会按条件判断顺序优先匹配PHD,可根据实际优先级调整判断顺序
  • 若需要将新列命名为原代码中的Campaign_Degree,直接将代码中所有的Degree替换为Campaign_Degree即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 09:36:04