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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 131
  • Облачные технологии14 071
  • QA вакансии3 448
  • Backend вакансии2 087
  • Инженер данных1 783
  • Продакт-менеджер1 221

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии976
  • AI вакансии943
  • Frontend вакансии738
  • Mobile вакансии44

По стеку

  • Go8 685
  • Java6 537
  • Node.js2 024
  • .NET1 723
  • Kotlin1 612
  • Rust1 462
  • C#710
  • PHP682
  • C++574

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

  • Kubernetes7 766
  • DevOps вакансии6 046
  • Linux-инфраструктура5 493
  • Terraform / IaC4 271
  • CI/CD3 241
  • Мониторинг и Observability1 790
  • SRE564
  • Кибербезопасность445

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

  • Data Scientist1 120
  • Бизнес-аналитик913
  • Аналитик данных834
  • Системный аналитик150

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

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

По регионам

  • Вакансии в США43 094
  • Вакансии в Европе23 429
  • Вакансии в Канаде4 376
  • Работа в России3 903

По формату

  • Удалённые вакансии72 764
  • Релокация в США43 097
  • Гибридная работа12 388
  • Офисная работа7 092

По уровню

  • Senior вакансии41 715
  • Middle вакансии20 188
  • Junior вакансии6 560

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • 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

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

  • Middle/Senior Data Analyst
  • ML-инженер
  • Senior Data Scientist
  • Data Engineer
  • Middle+ Data Scientist — GenAI & Agentic AI

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

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