Ваша первая строка может быть закорочена, так как условие всегда одинаково, а имена столбцов следуют шаблону:
df.filter(like='6th-Grade-Q').eq('Y').all(1).sum()
Если есть другие столбцы, которые начинаются с '6th-Grade-Q'
, чем эти 4, не используйте фильтр и явно указывайте 4 столбца в списке.Для второго условия вы можете использовать:
(df[['6th-Grade-Q1', '6th-Grade-Q2', '6th-Grade-Q3']].eq('Y').all(1) & df['6th-Grade-Q4'].eq('X')).sum()
Так как вы просто хотите рассчитать, нет необходимости в подстановке исходного DataFrame
, а затем вычислять длину.Просто сложите True
значения маски.
Если вам нужно более общее решение для проверки множества операторов &
между условиями равенства между столбцами, которые не следуют шаблону, то вернитесь к numpy
.Сначала укажите список столбцов и равенство, которое вы хотите проверить как кортежи:
import numpy as np
condlist = [('6th-Grade-Q1', 'Y'), ('6th-Grade-Q2', 'Y'),
('6th-Grade-Q3', 'Y'), ('6th-Grade-Q4', 'Y')]
np.logical_and.reduce([df[col].eq(val) for col,val in condlist]).sum()