Сравнение с True
необязательно, только логические цепочки маски с &
:
df['D'] = df['A'] & df['B'] & df['C']
Если важна производительность:
df['D'] = df['A'].values & df['B'].values & df['C'].values
Или используйте DataFrame.all
для проверки всех True
с в строках:
df['D'] = df[['A','B','C']].all(axis=1)
#numpy all
#df['D'] = np.all(df.values,1)
print (df)
A B C D
0 True True True True
1 True False False False
2 False False False False
Производительность :
np.random.seed(125)
def all1(df):
df['D'] = df.all(axis=1)
return df
def all1_numpy(df):
df['D'] = np.all(df.values,1)
return df
def eval1(df):
df['D'] = df.eval('A & B & C')
return df
def chained(df):
df['D'] = df['A'] & df['B'] & df['C']
return df
def chained_numpy(df):
df['D'] = df['A'].values & df['B'].values & df['C'].values
return df
def make_df(n):
df = pd.DataFrame({'A':np.random.choice([True, False], size=n),
'B':np.random.choice([True, False], size=n),
'C':np.random.choice([True, False], size=n)})
return df
perfplot.show(
setup=make_df,
kernels=[all1, all1_numpy, eval1,chained,chained_numpy],
n_range=[2**k for k in range(2, 25)],
logx=True,
logy=True,
equality_check=False,
xlabel='len(df)')