首页 > 解决方案 > 基于具有条件的其他列值创建新列

问题描述

我有一列包含值:

品牌1
品牌2
品牌3
data.brand = data.brand.astype(str)
data.brand = data.brand.replace(r'^\s*$', np.nan, regex=True)
data['branded'] = np.where(data['brand']!= 'nan', True, False)

在第一次初始化代码后,我得到结果:

品牌
品牌1 真的
品牌2 真的
真的
品牌3 真的

在第二次初始化相同的代码后,我得到了想要的结果:

品牌
品牌1 真的
品牌2 真的
错误的
品牌3 真的

面对/避免这个问题的更聪明的方法是什么?

标签: pythonpandasdataframenumpy

解决方案


这个答案只关注为什么第一次迭代不起作用

在您的代码中,当您将 the 替换为 时data.brandregex您将替换为np.nanwhich is not nan,因此第一个 init 无法识别下一行中的条件:np.where(data['brand']!= 'nan', True, False)。但是,在第二次初始化时,该行已经是 anp.nan并且您在设置为.astype(str)的第一行中执行此操作,因此第三行有效。np.nan'nan'

解决方案:

代替:

data.brand = data.brand.replace(r'^\s*$', np.nan, regex=True)

和:

data.brand = data.brand.replace(r'^\s*$', 'nan', regex=True)

这将从一开始就将替换值设置为'nan',因此第三行将在第一次迭代中运行良好。


推荐阅读