> Как вывести в одном датафрейме результаты по студентам с баллами по математике и биологии ниже 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() удобен для читаемости, но требует аккуратности с именами колонок, содержащими пробелы - их нужно заключать в обратные кавычки.

Пример кода

PYTHON
import pandas as pd
df = pd.DataFrame({
'студент': ['Анна', 'Борис', 'Виктор', 'Галина'],
'математика': [85, 72, 90, 65],
'биология': [78, 69, 88, 70]
})
# вариант с булевой маской
result = df[(df['математика'] < 80) & (df['биология'] < 80)]
# вариант с query
result_query = df.query('математика < 80 and биология < 80')
print(result)

Как отвечать на собеседовании

Начните с прямого ответа - покажите синтаксис фильтрации. Затем кратко объясните, почему используется &, а не and. Упомяните альтернативу через query(). Если спросят про производительность, скажите, что query() может быть быстрее на больших датафреймах, но для типовых задач разница незначительна. Не углубляйтесь в детали реализации pandas, если не просят.

Что проверяет интервьюер

Интервьюер оценивает знание базовых операций pandas: булева индексация, приоритет операторов, работа с пропущенными значениями. Также проверяется понимание разницы между поэлементными и скалярными операциями. Для middle-уровня важно не просто дать рабочий код, но и объяснить, почему он работает именно так.

Типичные ошибки

  • Использование and вместо & - приводит к ValueError.
  • Забытые скобки вокруг условий - из-за приоритета & выше сравнений.
  • Сравнение с колонкой, содержащей строки, - даёт неверные результаты.
  • Предположение, что NaN будет отфильтрован - на самом деле строки с NaN просто не попадут в результат, но это не ошибка, а особенность.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью