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

求助:Pandas DataFrame中基于条件生成新列的语法问题

解决Pandas DataFrame按条件生成新列的问题

你第二行代码运行失败的核心原因是:raw_data_df['Client Contract Number'].str.contains("_")返回的是布尔值Series(整个列的判断结果),而Python原生的if-else只能处理单个布尔值,没法直接对整个列做批量判断,导致报错。

下面给你几种可行的解决方案:

方案1:用numpy.where实现向量化判断(推荐,效率最高)

这种方式是Pandas处理批量条件判断的标准做法,适合大数据集:

import numpy as np

# 定义两种情况的取值
has_underscore_val = raw_data_df['Client Contract Number'].str.split('_').str[0]
no_underscore_val = raw_data_df['Client Contract Number'].str.replace('-', '')

# 按条件赋值
raw_data_df['Search Text'] = np.where(
    raw_data_df['Client Contract Number'].str.contains('_'),
    has_underscore_val,
    no_underscore_val
)

方案2:用Series.apply自定义逻辑

如果后续需要扩展更复杂的规则,这种方式更直观易懂:

def get_search_text(val):
    if '_' in val:
        return val.split('_')[0]
    else:
        return val.replace('-', '')

raw_data_df['Search Text'] = raw_data_df['Client Contract Number'].apply(get_search_text)

方案3:用正则提取结合fillna

利用正则表达式直接提取下划线前的内容,没有下划线的行用替换短横线后的值填充:

raw_data_df['Search Text'] = (
    raw_data_df['Client Contract Number']
    .str.extract(r'^([^_]+)', expand=False)  # 提取下划线前的所有字符
    .fillna(raw_data_df['Client Contract Number'].str.replace('-', ''))  # 填充无下划线的情况
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:01:09