np.select() 条件下的否定
Negation in np.select() condition
这是我的代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({ 'var1': ['a', 'b', 'c',np.nan, np.nan],
'var2': [1, 2, np.nan , 4, np.nan]
})
conditions = [
(not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"]))),
(pd.isna(df["var1"])) & (pd.isna(df["var2"]))]
choices = ["No missing", "Both missing"]
df['Result'] = np.select(conditions, choices, default=np.nan)
输出:
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1478, in __nonzero__
f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
第 (not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"])))
行有问题。当 var1
和 var2
都不是 NaN
值时,该行应该给出 TRUE
。这里的问题是否定,因为没有否定的条件就没有问题。
问题: 如何更正 (not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"])))
行,以防在 var1
和 var2
中都不是 [=17] =] 值条件应该给 TRUE
?
尝试:
conditions = [(~pd.isna(df["var1"]) & ~pd.isna(df["var2"])),
(pd.isna(df["var1"]) & pd.isna(df["var2"]))]
这是我的代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({ 'var1': ['a', 'b', 'c',np.nan, np.nan],
'var2': [1, 2, np.nan , 4, np.nan]
})
conditions = [
(not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"]))),
(pd.isna(df["var1"])) & (pd.isna(df["var2"]))]
choices = ["No missing", "Both missing"]
df['Result'] = np.select(conditions, choices, default=np.nan)
输出:
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1478, in __nonzero__
f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
第 (not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"])))
行有问题。当 var1
和 var2
都不是 NaN
值时,该行应该给出 TRUE
。这里的问题是否定,因为没有否定的条件就没有问题。
问题: 如何更正 (not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"])))
行,以防在 var1
和 var2
中都不是 [=17] =] 值条件应该给 TRUE
?
尝试:
conditions = [(~pd.isna(df["var1"]) & ~pd.isna(df["var2"])),
(pd.isna(df["var1"]) & pd.isna(df["var2"]))]