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

Python:如何根据其他列的值对指定列应用函数

问题修正与解决方案

你的代码存在几个明显错误,我会逐一指出并给出正确实现:

原代码的问题点

  • 自定义函数add_string里误用了函数名作为变量,应该用传入的add_str参数,而且这里不需要递归,直接拼接即可
  • apply的lambda中,判断条件应该针对当前行的Job值(x['Job'] == 1),而非整个列的布尔结果
  • else分支引用了不存在的SubjID列,应该保留原行的ID值
  • 调用自定义函数时没有传入正确的当前行ID值,而是用了未定义的string变量

正确实现方式

方式1:修正自定义函数+apply

def add_underscore(string):
    # 截取第一个字符,拼接下划线,再拼接剩余部分
    return string[0] + '_' + string[1:]

# 逐行处理:Job为1时调用函数,否则保留原ID
df['ID'] = df.apply(lambda x: add_underscore(x['ID']) if x['Job'] == 1 else x['ID'], axis=1)

方式2:更高效的向量化操作(推荐)

apply逐行处理效率较低,大数据量下建议用Pandas的字符串方法结合布尔索引:

# 先筛选Job=1的行,直接修改ID列
mask = df['Job'] == 1
df.loc[mask, 'ID'] = df.loc[mask, 'ID'].str[0] + '_' + df.loc[mask, 'ID'].str[1:]

或者用np.where一行搞定:

import numpy as np
df['ID'] = np.where(df['Job'] == 1, df['ID'].str[0] + '_' + df['ID'].str[1:], df['ID'])

运行后你的DataFrame会变成:

IDJob
1_xyz1
2_xyz1
3xyz0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:42:10