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

Pandas中基于多列条件的if else逻辑实现问题

Pandas:基于条件创建新列的问题解决

问题背景

现有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    "code": ['sp', 'wh', 'sp'],
    "qty": [20, 30, 10]})

需要创建新列out:当code列值为'sp'时,out取值对应qty列的值;否则取值为0。

用户尝试的代码存在语法错误:

df['out'] = df.apply(lambda x: x['qty']) if x['code'] == 'sp' else 0)

预期输出:

code  qty  out
0    sp   20   20
1    wh   30    0
2    sp   10   10

修正方案

方法1:修复apply语法(不推荐,逐行处理效率低)

你的代码错误在于括号位置错误,if-else逻辑需要放在lambda函数内部,同时必须指定axis=1表示逐行处理:

df['out'] = df.apply(lambda x: x['qty'] if x['code'] == 'sp' else 0, axis=1)

方法2:矢量化操作(推荐,效率远高于逐行处理)

Pandas优先推荐矢量化操作,避免逐行循环/apply,以下两种方式都可以实现需求:

方式A:使用numpy.where

import numpy as np

df['out'] = np.where(df['code'] == 'sp', df['qty'], 0)

方式B:布尔索引赋值

先将out列初始化为0,再给满足条件的行赋值:

df['out'] = 0
df.loc[df['code'] == 'sp', 'out'] = df['qty']

结果验证

执行任意一种方法后,打印df即可得到预期结果:

print(df)
# 输出:
#   code  qty  out
# 0    sp   20   20
# 1    wh   30    0
# 2    sp   10   10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:05:53