Выбрать строки в DataFrame на основе значений в столбце
Отвечая на вопрос "Какая доля женщин, не проходивших курс подготовки к экзамену, не сдала экзамен по математике?", написал:
len(df[(df["test preparation"] == "none") & (df["math score"] < passmark) & (df.gender == "female")])/len(df[(df["test preparation"] == "none") & (df.gender == "female")])
Здесь все правильно и верно.
df["test preparation"] == "none" - не проходившие курс подготовки
df["math score"] < passmark - не сдавшие экзамен
df.gender == "female" - женщины
Но увидел вот такую конструкцию, она тоже правильная:
df[(df['test preparation'] == 'none') & (df['gender'] == 'female')]['math score'] < passmark).mean()
Уже не первый раз вижу подобные конструкции. Это довольно коротко и приятно на глаз. Помогите разобраться, как она образуется. Особенно не понимаю вот это переход:
& (df['gender'] == 'female')](не понимаю вот этот переход)['math score'] < passmark)
Спасибо!
Ответы (1 шт):
Тут берётся нужный столбец из данных. А дальше здесь используется та особенность питона, что булевы значения True и False воспринимаются как числа 1 и 0. Соответственно значение условия будет 1, если истина и 0, если ложь. Ну а дальше считаем mean - складываем единицы и нули, и делим на их общее количество. Т.е. получается тоже самое, что количество выполненных условий, деленное на количество строк. То есть та самая доля.