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

Pandas基于两列条件生成新列出错,求问题排查与优化方案

问题分析与解决方法

错误原因

你代码里的逻辑判断用了&,这是Python中的按位与运算符,而非逻辑与运算符。而且&的优先级高于==,导致条件被错误解析。例如row['T1']==1 & row['T2']==1会被执行成row['T1'] == (1 & row['T2']) == 1,完全偏离了原本的判断逻辑,最终导致结果错误。

修正后的代码

有两种修正方式:

方式1:替换为逻辑与运算符and

def merge(row):
    if row['T1'] == 1 and row['T2'] == 1:
        val = '1_1'
    elif row['T1'] == 1 and row['T2'] == 2:
        val = '1_2'  
    elif row['T1'] == 1 and row['T2'] == 3:
        val = '1_3'
    elif row['T1'] == 1 and row['T2'] == 4:
        val = '1_4'
    elif row['T1'] == 2 and row['T2'] == 1:
        val = '2_1'
    elif row['T1'] == 2 and row['T2'] == 2:
        val = '2_2'
    elif row['T1'] == 2 and row['T2'] == 3:
        val = '2_3'
    else:
        val = '2_4'
    return val

df.loc[:, 'new'] = df.apply(merge, axis=1)

方式2:保留&但给每个条件加括号

如果习惯使用pandas的按位与操作,需要给每个==判断加上括号,确保优先级正确:

def merge(row):
    if (row['T1'] == 1) & (row['T2'] == 1):
        val = '1_1'
    elif (row['T1'] == 1) & (row['T2'] == 2):
        val = '1_2'  
    elif (row['T1'] == 1) & (row['T2'] == 3):
        val = '1_3'
    elif (row['T1'] == 1) & (row['T2'] == 4):
        val = '1_4'
    elif (row['T1'] == 2) & (row['T2'] == 1):
        val = '2_1'
    elif (row['T1'] == 2) & (row['T2'] == 2):
        val = '2_2'
    elif (row['T1'] == 2) & (row['T2'] == 3):
        val = '2_3'
    else:
        val = '2_4'
    return val

df.loc[:, 'new'] = df.apply(merge, axis=1)

更优实现方法

从你的需求来看,本质是将T1和T2的值用下划线拼接成字符串,完全不需要写大量条件判断。直接使用pandas的向量化字符串操作,效率远高于逐行处理的apply:

df['new'] = df['T1'].astype(str) + '_' + df['T2'].astype(str)

如果偏好lambda表达式写法,也可以用:

df['new'] = df.apply(lambda x: f"{x['T1']}_{x['T2']}", axis=1)

前者是整列批量处理,速度更快,适合大数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:23:23