首页 > 解决方案 > 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)

标签: pythonpandasnumpy

解决方案


第二个条件周围缺少括号:

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

推荐阅读