使用条件逻辑创建新列并取决于列是否存在
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
我有一个这样的数据框:
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