python - 基于具有条件的其他列值创建新列
问题描述
我有一列包含值:
牌 |
---|
品牌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 | 真的 |
面对/避免这个问题的更聪明的方法是什么?
解决方案
这个答案只关注为什么第一次迭代不起作用
在您的代码中,当您将 the 替换为 时data.brand
,regex
您将替换为np.nan
which 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'
,因此第三行将在第一次迭代中运行良好。
推荐阅读
- reactjs - Office UI Fabric React - 下拉列表不尊重 selectedKey 道具
- excel - 获取同一列中的产品总和
- bootstrap-4 - 如何仅在引导程序 4 的移动视图中显示表列
- c# - 按类型获取元素 XDocument
- c++ - 如何在调试中使用 Visual Studio 正确编译 WebRTC?
- unity3d - 如何在 Vuforia 中获得反射面?
- java - OptionalBinding 使用 Guice 避免用户绑定
- sql - 如何在触发器更新时对多行求和?
- quickfix - 10000 到 19999 之间的 FIX 协议标签有什么用?
- android - Kotlin 错误:Dagger 不支持注入私有字段 private boolean isAppNull;