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

如何在Pandas DataFrame中按条件创建新列,仅显示正值ClosingBalance的SKU

解决Pandas创建条件列的问题

嘿,我来帮你搞定这个Pandas的问题!先看看你的需求和遇到的问题:

我有一个Pandas DataFrame,数据如下:

SKU ClosingBalance
S1 10
S2 np.nan
S3 0
S4 20

我想要创建一个新列SKU_CB,仅展示ClosingBalance为正值的SKU,其余标记为np.nan,预期结果如下:

SKU ClosingBalance SKU_CB
S1 10 S1
S2 np.nan np.nan
S3 0 np.nan
S4 20 S4

我尝试了以下代码,但无法正常运行:

conditions = [(df['ClosingBalance'] > 1)]
df['SKU_CB'] = np.select(conditions, df['SKU'], default=np.nan)

你的代码问题在哪?

你的代码有两个小问题:

  1. np.select的参数格式不对:这个函数的第二个参数需要是和条件列表长度匹配的取值列表,你直接传了df['SKU'],应该把它放进一个列表里,比如[df['SKU']]。
  2. 条件范围不符合需求:你写的是ClosingBalance > 1,但需求是匹配所有正值(>0),而且S3的0也需要被标记为NaN,所以条件应该改成ClosingBalance > 0。

修正后的代码

方法1:修正np.select的用法

import pandas as pd
import numpy as np

# 先构造你的DataFrame
data = {'SKU': ['S1', 'S2', 'S3', 'S4'],
        'ClosingBalance': [10, np.nan, 0, 20]}
df = pd.DataFrame(data)

conditions = [(df['ClosingBalance'] > 0)]
# 把df['SKU']放到列表里,和条件列表对应
df['SKU_CB'] = np.select(conditions, [df['SKU']], default=np.nan)

方法2:用更简洁的where方法(推荐)

Pandas的where方法专门处理这种“条件保留值,否则替换”的场景,代码更直观:

df['SKU_CB'] = df['SKU'].where(df['ClosingBalance'] > 0, np.nan)

原理很简单:当ClosingBalance > 0为真时,保留SKU列的值;当条件为假或者遇到NaN时,替换成np.nan,完全符合你的预期。

运行结果

不管用哪种方法,最终都会得到你想要的结果:

SKU  ClosingBalance SKU_CB
0  S1            10.0     S1
1  S2             NaN    NaN
2  S3             0.0    NaN
3  S4            20.0     S4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:14:05