提问人:Stan 提问时间:1/8/2021 更新时间:1/8/2021 访问量:28
使用条件逻辑创建新列,并取决于列是否存在
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 are missing) ,则:
df['Out'] = (df.B) |df.E
如果说(缺少 C、D、E),那么
df['Out'] = (df.A & df.B)
等等:
所以我面临的问题是,如何以 pythonic 的方式编写此代码,而不是使用多个 if 语句等?任何帮助将不胜感激。谢谢
答:
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
评论