pandas DataFrame 中的 If 语句,从可能包含 nan 的其他三个列计算的布尔列
If statement in pandas DataFrame, boolean column calculated from three other columns that may contain nan
我正在确定要放入列 A
的布尔值,给定列 B
、C
和 D
.
的值
列 B
、C
、D
包含布尔值,但也可能 nan
.
我需要这个语句来产生以下结果
第 A
列应该是...
True if [B,C,D] = [False, False, False]
False if [B,C,D] contains True, regardless of other values
nan if columns [B,C,D] contain only False or nan
不幸的是,nan
值是 returning False
,所以下面的代码不起作用。
df['A'] = ~(df['B'] | df['C'] | df['D'])
谢谢。
编辑以澄清措辞:
以上三种情况被认为是接二连三的。 returns True 的唯一条件是 FFF。集合中的任何 true 都应该 return false。任何包含 FF 和 nan 组合的集合都应该 return nan。在第三种情况下,我不能再肯定地说这一行是三重否定,所以我 return nan。在 B|C|D 中具有 True 的任何行绝对不是三重否定。
正如评论中指出的那样,措辞有歧义,因为全 False
行可能有两个可能的 return 值。假设 all-False
的情况应该给出 True
,以下应该满足您的要求:
In [41]: df
Out[41]:
B C D
0 False False False
1 True False NaN
2 NaN False False
In [42]: df['A'] = df.apply(lambda row: True if not any(row) else False if True in list(row) else np.nan, axis=1)
In [43]: df
Out[43]:
B C D A
0 False False False True
1 True False NaN False
2 NaN False False NaN
我正在确定要放入列 A
的布尔值,给定列 B
、C
和 D
.
列 B
、C
、D
包含布尔值,但也可能 nan
.
我需要这个语句来产生以下结果
第 A
列应该是...
True if [B,C,D] = [False, False, False]
False if [B,C,D] contains True, regardless of other values
nan if columns [B,C,D] contain only False or nan
不幸的是,nan
值是 returning False
,所以下面的代码不起作用。
df['A'] = ~(df['B'] | df['C'] | df['D'])
谢谢。
编辑以澄清措辞:
以上三种情况被认为是接二连三的。 returns True 的唯一条件是 FFF。集合中的任何 true 都应该 return false。任何包含 FF 和 nan 组合的集合都应该 return nan。在第三种情况下,我不能再肯定地说这一行是三重否定,所以我 return nan。在 B|C|D 中具有 True 的任何行绝对不是三重否定。
正如评论中指出的那样,措辞有歧义,因为全 False
行可能有两个可能的 return 值。假设 all-False
的情况应该给出 True
,以下应该满足您的要求:
In [41]: df
Out[41]:
B C D
0 False False False
1 True False NaN
2 NaN False False
In [42]: df['A'] = df.apply(lambda row: True if not any(row) else False if True in list(row) else np.nan, axis=1)
In [43]: df
Out[43]:
B C D A
0 False False False True
1 True False NaN False
2 NaN False False NaN