python - np.where 不适用于多种条件?

标签 python pandas numpy

我有一个看起来有点像这样的数据框:

 | offer_code | column2 | column3
-|------------|---------|--------
0| 123        | X       | NaN
1| 123        | Y       | NaN
2| 456        | X       | X
3| 456        | Y       | X

我正在尝试添加一个新列,该列将所有列 3 = NaN 或列 2 和列 3 匹配的行标记为 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

关于python - np.where 不适用于多种条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67520804/

相关文章:

python - 在 Python 中实现 lisp

python - 合并 Pandas 中的连续行并保留一些行不变

python - 用 Pandas 计算大数据中的条目

python - 程序中的数组

python - 识别 pandas 中由多列组成的组中的第一个非零元素

python-3.x - Python OpenCV - 如何保存 5 channel 图像

python - 验证蛋白质序列

python - 为什么标准 os 模块下没有 os.copy() ?

python - 来回传递变量与使用 python 常量

python - Pandas - 保留与其他数据框中的两个单元格匹配的行