Python 基于多种条件创建列

Python 基于多种条件创建列,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据框,看起来像这样: Id Col1 Col2 Col3 Col4 1 1 1 1 0 2 1 0 1 0 3 0 1 1 0 4 1 1 0 1 5 1 1 1 nan ... col4是唯一具有nan值的 因此,我有多个条件来创建多个列,例如

我有一个数据框,看起来像这样:

Id   Col1    Col2     Col3   Col4
1     1        1       1      0
2     1        0       1      0
3     0        1       1      0
4     1        1       0      1
5     1        1       1      nan
...
col4是唯一具有nan值的

因此,我有多个条件来创建多个列,例如:

New column A1
IF Col1 = 1 AND Col2 = 1 AND Col3 = 1
   AND (Col4 is null OR col4 = 0)
THEN 1
ELSE 0
New column A2
IF Col1 = 1 AND Col2 = 1 AND Col3 = 0
   AND (Col4 > 0)
THEN 1
ELSE 0
New column A3
IF Col1 = 1 AND Col2 = 1 AND Col3 = 0
   AND (Col4 is null OR col4 = 0)
THEN 1
ELSE 0
New column A4
IF Col1 = 1 AND Col2 = 0 AND Col3 = 1
   AND (Col4 > 0)
THEN 1
ELSE 0
New column A5
IF Col1 = 1 AND Col2 =01 AND Col3 = 1
   AND (Col4 > 0)
THEN 1
ELSE 0
我正在使用下面的代码创建新列

A1_Conditions = [
    (df['col1'] ==1) & (df['col2'] == 1) & (df['col3'] == 1)
    &((df['col4'] ==0) | (df['col4'].isnull()))
]
First_Count['A1'] = np.select(A1_Conditions, [1], 0)
它可以工作,但是有很多列需要创建,阅读起来也越来越复杂


还有其他方法吗?

一种方法是使用重用条件,如果需要分配
0,1
,您可以将掩码转换为整数或使用或:



一个具有重用条件的想法,如果需要分配
0,1
,您可以将掩码转换为整数或使用或:


mcol1_1 = df['col1'] == 1
mcol2_1 = df['col2'] == 1
mcol3_1 = df['col3'] == 1
mcol3_0 = df['col3'] == 0
mcol4_0 = df['col4'] == 0
mcol4_na = df['col4'].isnull()
mcol4_more0 = df['col4'] > 0
df['A1'] = (mcol1_1 & mcol2_1 & mcol3_1 & (mcol4_0 | mcol4_na)).astype(int)
df['A2'] = (mcol1_1 & mcol2_1 & mcol3_0 & mcol4_more0).astype(int)
...
...
df['A1'] = np.where(mcol1_1 & mcol2_1 & mcol3_1 & (mcol4_0 | mcol4_na), 1, 0)
df['A2'] = np.where(mcol1_1 & mcol2_1 & mcol3_0 & mcol4_more0, 1, 0)
...
...
df['A1'] = (mcol1_1 & mcol2_1 & mcol3_1 & (mcol4_0 | mcol4_na)).view('i1')
df['A2'] = (mcol1_1 & mcol2_1 & mcol3_0 & mcol4_more0).view('i1')
...
...