pandas DataFrame 中的 If 语句,从可能包含 nan 的其他三个列计算的布尔列

If statement in pandas DataFrame, boolean column calculated from three other columns that may contain nan

我正在确定要放入列 A 的布尔值,给定列 BCD.

的值

BCD 包含布尔值,但也可能 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