基于其他列值创建新列

omhiaaxx  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(374)

我有一列值:
品牌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)

在代码的第一次初始化之后,我得到了以下结果:
BrandedBrand1truebrand2truenantruebrand3true品牌
在相同代码的第二次初始化之后,我得到了期望的结果:
品牌1真品牌2真品牌3真
面对/避免这个问题的更聪明的方法是什么?

z9smfwbn

z9smfwbn1#

这个答案只关注为什么第一次迭代不起作用
在代码中替换 data.brandregex ,替换为 np.nan 哪一个不是 nan ,因此第一个init无法识别下一行中的条件: np.where(data['brand']!= 'nan', True, False) . 但是,在第二次初始化时,该行已经是 np.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)

这将把replace值设置为 'nan' 从getgo开始,第三行将在第一次迭代中正常运行。

相关问题