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

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

提问人:Stan 提问时间:1/8/2021 更新时间:1/8/2021 访问量:28

问:

我有一个这样的数据帧:

       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 are missing) ,则:

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

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

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

等等:

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

Python 熊猫 应用 布尔逻辑 重新索引

评论


答:

4赞 jezrael 1/8/2021 #1

一个想法是在测试之前添加 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