Python 根据列是否存在,使用条件逻辑创建新列
我有这样一个数据帧:Python 根据列是否存在,使用条件逻辑创建新列,python,pandas,apply,boolean-logic,reindex,Python,Pandas,Apply,Boolean Logic,Reindex,我有这样一个数据帧: 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
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
所以我想从这些列中创建一个输出(如1),如果A和B都是1,或者如果任何C/D/E都是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
然而,问题是这个逻辑是好的,但是由于我从DB中提取数据,所以很多时候数据可能会丢失任何列(a、B、C、D或E)。逻辑是一样的
因此,如果存在A或B中的任何一个(假设1缺失-例如A),则:
如果A和B都缺失,则:
df['Out'] = dfB.C | df.D |df.E
df['Out'] = (df.B)| df.D |df.E
如果说(A&C缺失),则:
如果(A、C、D)缺失,则:
如果说(C,D,E缺失),那么
等等:
因此,我面临的问题是,如何以pythonic的方式编写此代码,而不是使用多个if语句等?任何帮助我都将不胜感激。谢谢一个想法是添加测试前缺少的所有列:
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
df['Out'] = (df.B) |df.E
df['Out'] = (df.A & df.B)
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