> Как вывести в одном датафрейме результаты по студентам с баллами по математике и биологии ниже 80 (Python)
Уровень: middle · Роль: backend · Категория: Технические вопросы
Компании: Самокат
Стек: Python
> Пример ответа
Короткий ответ
Нужно отфильтровать датафрейм по условию: (df['математика'] < 80) & (df['биология'] < 80). Важно использовать & вместо and, потому что pandas работает с поэлементными операциями над Series. Результат - датафрейм, содержащий только строки, где оба условия выполняются одновременно.
Подробное объяснение
В pandas фильтрация строк выполняется через булеву маску - Series из True/False, которая передаётся в df[mask]. Для комбинирования нескольких условий используется побитовый оператор &, а не логический and. Это связано с тем, что and пытается привести операнды к одному булевому значению, что невозможно для Series. При использовании & каждое условие должно быть в скобках из-за приоритета операторов. Альтернативный подход - метод query(), который принимает строку с условием и работает быстрее на больших данных, но менее гибок для сложной логики.
На практике
Сначала убедитесь, что колонки с баллами имеют числовой тип, иначе сравнение будет лексикографическим. Если в данных есть NaN, они автоматически исключаются из результата, так как сравнение с NaN даёт False. Для обратного условия (хотя бы один предмет ниже 80) используется | вместо &. Метод query() удобен для читаемости, но требует аккуратности с именами колонок, содержащими пробелы - их нужно заключать в обратные кавычки.
Пример кода
PYTHONimport pandas as pddf = pd.DataFrame({'студент': ['Анна', 'Борис', 'Виктор', 'Галина'],'математика': [85, 72, 90, 65],'биология': [78, 69, 88, 70]})# вариант с булевой маскойresult = df[(df['математика'] < 80) & (df['биология'] < 80)]# вариант с queryresult_query = df.query('математика < 80 and биология < 80')print(result)
Как отвечать на собеседовании
Начните с прямого ответа - покажите синтаксис фильтрации. Затем кратко объясните, почему используется &, а не and. Упомяните альтернативу через query(). Если спросят про производительность, скажите, что query() может быть быстрее на больших датафреймах, но для типовых задач разница незначительна. Не углубляйтесь в детали реализации pandas, если не просят.
Что проверяет интервьюер
Интервьюер оценивает знание базовых операций pandas: булева индексация, приоритет операторов, работа с пропущенными значениями. Также проверяется понимание разницы между поэлементными и скалярными операциями. Для middle-уровня важно не просто дать рабочий код, но и объяснить, почему он работает именно так.
Типичные ошибки
- Использование
andвместо&- приводит кValueError. - Забытые скобки вокруг условий - из-за приоритета
&выше сравнений. - Сравнение с колонкой, содержащей строки, - даёт неверные результаты.
- Предположение, что
NaNбудет отфильтрован - на самом деле строки сNaNпросто не попадут в результат, но это не ошибка, а особенность.
> Похожие задачи по backend
Какие есть ограничения на ключи в dict в Python?
Как посчитать возраст в годах между текущей датой и датой рождения в Python
Как параллелить выполнение функции в Python
Что должно присутствовать у объекта, чтобы он был итератором в Python
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью