python - np.where 不适用于多种条件?
问题描述
我有一个看起来有点像这样的数据框:
| offer_code | column2 | column3
-|------------|---------|--------
0| 123 | X | NaN
1| 123 | Y | NaN
2| 456 | X | X
3| 456 | Y | X
我正在尝试添加一个新列,它将 column3 = NaN OR column2 和 column3 匹配的所有行标记为 0。其他所有内容都应标记为 1。因此结果应如下所示:
| offer_code | column2 | column3 | flag
-|------------|---------|---------|-----
0| 123 | X | NaN | 0
1| 123 | Y | NaN | 0
2| 456 | X | X | 0
3| 456 | Y | X | 1
但是,我的代码只是将每一行标记为 1。这是我正在使用的代码;任何人都可以看到我要去哪里错了吗?
df["flag"] = np.where(df["column3"].isnull()|df["column2"]==df["column3"],0,1)
解决方案
第二个条件周围缺少括号:
df["flag"] = np.where(df["column3"].isnull() |
(df["column2"] == df["column3"]), 0, 1)
# ^ ^
或与eq
:
df["flag"] = np.where(df["column3"].isnull() |
df['column2'].eq(df['column3']), 0, 1)
df
:
offer_code column2 column3 flag
0 123 X NaN 0
1 123 Y NaN 0
2 456 X X 0
3 456 Y X 1
推荐阅读
- javascript - 将 plotly 条形图保存到 json 并导入 html 文件会删除条形标签
- html - 如何将我的表情符号与标题文本对齐?
- java - 无法在 Spring 2.5 App 上运行 Java 7。说它需要 Java 1.5 或更高版本
- javascript - 无法使用 @kubernetes/client-node 获取集群内的所有作业
- java - 如何使用 Kotlin 和 Retrofit 在 Android 中绕过 HTTPS SSL 证书验证
- python - 无法使用 Python Selenium 在跨度类中定位元素
- bash - 如何比较一个脚本中的多行并在此基础上对该行中的列执行某些操作?在重击中
- android - 在 XML 中包含布局取决于条件
- java - 如何在春季重用.conf文件中的配置值
- python - SWIG c++ 向量类型映射到 python 列表