Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 412новых вакансий за сутки·55 411вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 671
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 396 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 728
  • Облачные технологии6 606
  • QA вакансии2 165
  • Android1 317
  • Инженер данных878
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 210
  • AI вакансии545
  • Fullstack вакансии500
  • Frontend вакансии422
  • Mobile вакансии28

По стеку

  • Go5 192
  • Java3 112
  • Kotlin1 085
  • Node.js992
  • Rust846
  • .NET660
  • PHP319
  • C++266
  • C#208

DevOps и инфраструктура

  • Kubernetes3 904
  • Linux-инфраструктура2 843
  • DevOps вакансии2 684
  • Terraform / IaC2 162
  • Мониторинг и Observability1 062
  • CI/CD921
  • SRE303
  • Кибербезопасность31

Аналитика и данные

  • Аналитик данных537
  • Data Scientist445
  • Бизнес-аналитик402
  • Системный аналитик68

Другие направления

  • Проджект-менеджер103
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise186 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PandasВсе вопросы
PandasMiddleКодинг

Чем transform() отличается от agg() при использовании с groupby()?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

agg() схлопывает группу в одну строку (форма меняется), transform() возвращает Series той же длины что исходный DataFrame — это ключевое различие при выборе метода.

agg — схлопывание групп

import pandas as pd

df = pd.DataFrame({
    "dept": ["eng", "eng", "hr", "hr", "eng"],
    "salary": [120_000, 95_000, 70_000, 80_000, 110_000],
})

# agg: 5 строк -> 2 строки (по числу групп)
agg_result = df.groupby("dept", as_index=False).agg(
    mean_sal=("salary", "mean"),
    count=("salary", "count"),
)
print(agg_result.shape)  # (2, 3)
print(agg_result)
#   dept       mean_sal  count
# 0  eng  108333.333333      3
# 1   hr   75000.000000      2

Ключевое различие: форма выходных данных

agg() уменьшает каждую группу до одной строки — результат содержит столько строк, сколько уникальных ключей. transform() возвращает объект той же длины и с тем же индексом, что исходный DataFrame: каждая строка получает значение, вычисленное для её группы. Это принципиально для feature engineering, когда нужно добавить групповую статистику как новый столбец без join.

transform — broadcast обратно в исходный DataFrame

# transform: 5 строк -> 5 строк, каждой строке присваивается mean её группы
df["dept_mean_sal"] = df.groupby("dept")["salary"].transform("mean")
df["salary_pct_of_dept"] = df["salary"] / df["dept_mean_sal"]
print(df)
#   dept  salary   dept_mean_sal  salary_pct_of_dept
# 0  eng  120000  108333.33               1.108
# 1  eng   95000  108333.33               0.877
# 2   hr   70000   75000.00               0.933
# 3   hr   80000   75000.00               1.067
# 4  eng  110000  108333.33               1.015

Когда использовать что

  • agg — нужна сводная таблица, отчёт, агрегат для дашборда.
  • transform — добавляем признак в исходный DataFrame (group mean, rank, z-score), нормализация внутри группы, заполнение NaN групповым значением.
  • apply — когда логика слишком сложна для agg/transform (возвращает произвольный объект), но медленнее.

Заполнение NaN через transform

df["salary"] = df["salary"].astype(float)
df.loc[2, "salary"] = float("nan")  # симулируем пропуск

# Заполнить NaN медианой группы без merge
df["salary"] = df["salary"].fillna(
    df.groupby("dept")["salary"].transform("median")
)

Ранжирование внутри группы

# transform("rank") возвращает float-ранг внутри группы
df["rank_in_dept"] = df.groupby("dept")["salary"].transform(
    lambda x: x.rank(method="dense", ascending=False)
)

Подводные камни

  • transform ожидает возврат той же длины — если функция возвращает скаляр, он транслируется; если Series другой длины — ValueError. agg такого ограничения не имеет.
  • agg с as_index=True создаёт MultiIndex при нескольких ключах groupby; забытый reset_index() ломает последующий merge по плоским столбцам.
  • Data leakage с transform — если вычислять групповое среднее на всём датасете (train+test) и добавлять как признак, модель получает информацию о test-выборке. Правило: fit transform только на train, затем apply через merge на test.
  • transform медленнее agg для стандартных функций потому что результат надо broadcasting обратно; для строк > 10M разница становится заметной.
  • Категориальные ключи без observed=True — groupby создаёт группы для всех категорий, transform вернёт NaN для строк несуществующих категорий, что неочевидно.
  • transform('nunique') недоступен напрямую — нужно transform(lambda x: x.nunique()), что значительно медленнее.
  • agg с несколькими функциями возвращает MultiIndex columns (('salary', 'mean')); сглаживайте через df.columns = ['_'.join(c) for c in df.columns].
  • sort в groupby влияет на transform('cumsum') — если sort=False, нарастающие агрегаты считаются в порядке появления строк в исходном DataFrame, а не по возрастанию ключа.

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

  • Объяснять groupby transform vs agg только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

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

  • Может ли связать groupby transform vs agg с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Как вы знаете этот вопрос?

Проверить себя по теме Pandas →

Источники

  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html
  • https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.transform.html
←Предыдущий вопросЧто такое `pd.NA` vs `np.nan` vs `None` в Pandas 2.x и когда они появляются?Следующий вопрос→Как проверять корректность решения на Pandas, а не только успешное выполнение кода?

Связанные темы

Pandasdata-aidata-processingpandasperformance-debugging

Вакансии с этим навыком

  • Стажёр по разработке ML-моделей
  • ML / DS Engineer (Classic ML)
  • Data Analyst / Data Engineer (LLM/AI)
  • Аналитик данных
  • Data Scientist III

Частые вопросы на собеседовании

  • Каковы типичные причины SettingWithCopyWarning и как его исправить?
  • В чём разница между merge(), join() и concat() в Pandas?
  • Как обрабатывать пропущенные значения в Pandas — isnull(), dropna(), fillna()?
  • В чём разница между .loc[] и .iloc[] для индексирования?