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

如何将R中字符串匹配条件赋值代码转换为Pandas等效Python语法

R代码对应Pandas实现方案

方案1:使用.loc布尔索引赋值(和原R逻辑完全对齐)

第一步:定义所有匹配规则的布尔掩码

和你已经写的逻辑一致,不需要正则的情况下可以关闭正则匹配提升性能:

network_tickets = df['ComplaintDescription'].str.contains('network', case=False, regex=False)
internet_tickets = df['ComplaintDescription'].str.contains('internet', case=False, regex=False)
billing_tickets = df['ComplaintDescription'].str.contains('bill', case=False, regex=False)
email_tickets = df['ComplaintDescription'].str.contains('email', case=False, regex=False)
charges_ticket = df['ComplaintDescription'].str.contains('charge', case=False, regex=False)

第二步:按规则赋值

先初始化目标列为默认值Others,再根据布尔掩码匹配赋值即可:

# 初始化默认分类
df['ComplaintType'] = 'Others'

# 按规则匹配覆盖,后赋值的规则优先级更高,和原R逻辑一致
df.loc[internet_tickets, 'ComplaintType'] = 'Internet'
df.loc[network_tickets, 'ComplaintType'] = 'Network'
df.loc[billing_tickets, 'ComplaintType'] = 'Billing'
df.loc[email_tickets, 'ComplaintType'] = 'Email'
df.loc[charges_ticket, 'ComplaintType'] = 'Charges'

方案2:使用numpy.select更简洁实现

如果不想写多行.loc赋值,可以用numpy的select方法批量处理条件和对应值:

import numpy as np

# 按顺序定义条件和对应返回值
conditions = [
    internet_tickets,
    network_tickets,
    billing_tickets,
    email_tickets,
    charges_ticket
]
values = ['Internet', 'Network', 'Billing', 'Email', 'Charges']

# 不满足所有条件的行自动赋值为default参数的'Others'
df['ComplaintType'] = np.select(conditions, values, default='Others')

之前代码报错原因

apply()是用来对DataFrame/Series的元素批量执行自定义函数的方法,你的使用场景不需要调用apply,直接使用布尔索引定位行即可完成赋值,逻辑和R的向量下标赋值完全对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:36:03