使用条件逻辑创建新列并取决于列是否存在

Creating New Columns with Conditional Logic and depending on if columns exist

我有一个这样的数据框:

       df 
          
            A   B   C   D   E
            1   0   1   0   1
            1   1   1   1   0
            0   1   1   1   1
            0   0   1   1   1
            1   1   0   1   1
            1   0   1   1   1
            1   1   0   0   1
            1   0   1   0   0
            1   1   0   0   0
            1   0   0   0   0

因此,如果 A 和 B 均为 1,或者如果任何 C/D/E 为 1,则我想从这些列创建一个输出(如 1),否则输出为零。但是,这不是问题,因为我使用的是:

         df['Out'] = (df.A & df.B) | df.C | df.D |df.E

所以输出是:

       df 


        A   B   C   D   E   Out
        1   0   1   0   1   1
        1   1   1   1   0   1
        0   1   1   1   1   1
        0   0   1   1   1   1
        1   1   0   1   1   1
        1   0   1   1   1   1
        1   1   0   0   1   1
        1   0   1   0   0   1
        1   1   0   0   0   1
        1   0   0   0   0   0

但是,问题是这个逻辑很好,但是由于我从数据库中提取数据,所以很多时候数据可能会丢失任何列(A 或 B 或 C 或 D 或 E ).不管怎样,逻辑都是一样的。

因此,如果存在 A 或 B 中的任何一个(假设缺少 1 - 假设 A),则:

        df['Out'] = (df.B) | df.C | df.D |df.E

如果 A 和 B 都缺失则:

        df['Out'] = dfB.C | df.D |df.E

如果说(缺少 A 和 C)则:

       df['Out'] = (df.B)| df.D |df.E

如果说(A、C、D缺失),则:

      df['Out'] = (df.B) |df.E

如果说(缺少C、D、E),那么

       df['Out'] = (df.A & df.B) 

等等:

所以我面临的问题是如何以 pythonic 方式编写此代码而不是使用多个 if 语句等?任何帮助我都会非常感激。谢谢

一个想法是在测试前添加 DataFrame.reindex 缺少的所有列:

df = df.reindex(['A','B','C','D','E'], axis=1, fill_value=0)

df['Out'] = (df.A & df.B) | df.C | df.D | df.E