我有一个看起来有点像这样的数据框:
| 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/