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

+921новая вакансия за сутки·58 907вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python9 813
  • Облачные технологии6 898
  • QA вакансии2 239
  • Android1 398
  • Инженер данных922
  • Продакт-менеджер346

Разработка

  • iOS1 305
  • Backend вакансии1 280
  • AI вакансии569
  • Fullstack вакансии543
  • Frontend вакансии450
  • Mobile вакансии27

По стеку

  • Go5 484
  • Java3 453
  • Node.js1 146
  • Kotlin1 133
  • Rust883
  • .NET837
  • PHP383
  • C++265
  • C#261

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

  • Kubernetes3 893
  • Linux-инфраструктура3 013
  • DevOps вакансии2 970
  • Terraform / IaC2 240
  • CI/CD1 066
  • Мониторинг и Observability1 051
  • SRE304
  • Кибербезопасность52

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

  • Аналитик данных542
  • Data Scientist482
  • Бизнес-аналитик455
  • Системный аналитик60

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

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

По регионам

  • Вакансии в США27 007
  • Вакансии в Европе10 890
  • Работа в России3 242
  • Вакансии в Канаде2 370

По формату

  • Удалённые вакансии44 577
  • Релокация в США26 904
  • Гибридная работа5 209
  • Офисная работа3 834

По уровню

  • Senior вакансии22 591
  • Middle вакансии12 174
  • Junior вакансии4 013

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

Все компании
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise134 вакансии
  • Celonis30 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen19 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

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

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

Как обрабатывать дублированные строки в DataFrame — duplicated() и drop_duplicates()?

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

duplicated() возвращает булеву маску дублей. drop_duplicates() удаляет их. Параметр subset задаёт колонки для сравнения, keep=("first"/"last"/False) — какие вхождения оставить. NaN считаются одинаковыми. Всегда делайте reset_index после очистки.

Базовое использование

import pandas as pd

df = pd.DataFrame({
    "user_id": [1, 2, 2, 3, 3],
    "event":   ["click", "click", "click", "view", "purchase"],
    "ts":      pd.to_datetime(["2024-01-01"] * 3 + ["2024-01-02"] * 2),
})

# Найти полные дубликаты
print(df.duplicated())                # [False, False, True, False, False]

# Удалить полные дубликаты, оставить первое вхождение
df_clean = df.drop_duplicates()
print(df_clean.shape)                 # (4, 3)

# Дубликаты только по user_id (разные события — не дубликаты)
print(df.duplicated(subset=["user_id"]))
# [False, False, True, False, True]

Два метода — разные задачи

duplicated() возвращает булеву маску: True для строк, которые являются дубликатами. drop_duplicates() возвращает DataFrame без дубликатов. Оба принимают одинаковые параметры.

Параметр keep

# keep="first" (по умолчанию) — оставить первое вхождение
df.drop_duplicates(subset=["user_id"], keep="first")

# keep="last" — оставить последнее вхождение
df.drop_duplicates(subset=["user_id"], keep="last")

# keep=False — удалить ВСЕ строки с дублирующимся ключом
df.drop_duplicates(subset=["user_id"], keep=False)
# Полезно, чтобы найти только уникальные события (без повторений вообще)

Практический паттерн: дедупликация событий

# Оставить последнее событие каждого пользователя
# (вместо drop_duplicates лучше sort + keep="last")
df_latest = (
    df.sort_values("ts")
      .drop_duplicates(subset=["user_id"], keep="last")
      .reset_index(drop=True)
)
print(df_latest)

# Посмотреть, сколько дубликатов по каждому user_id
dup_counts = df[df.duplicated(subset=["user_id"], keep=False)].groupby("user_id").size()
print(dup_counts)

Работа с NaN

# По умолчанию два NaN считаются одинаковыми (дублируют друг друга)
df2 = pd.DataFrame({"a": [1, None, None], "b": ["x", "y", "y"]})
print(df2.duplicated())  # [False, False, True]

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

  • inplace=True создаёт копию с CoW — с включённым Copy-on-Write (Pandas 2.0+) df.drop_duplicates(inplace=True) может не менять оригинал, если df — срез; безопаснее df = df.drop_duplicates().
  • NaN == NaN для duplicated — два NaN в одном столбце считаются дублями, что расходится с поведением обычного равенства Python (float("nan") != float("nan")).
  • keep=False удаляет все вхождения — легко перепутать с «удалить лишние копии»; если нужно оставить хотя бы одну запись, используйте keep="first".
  • reset_index после drop_duplicates — индекс остаётся от исходного DataFrame; при последующих операциях по позиции это приводит к ошибкам.
  • subset не проверяет орфографию — если в списке subset есть опечатка в имени колонки, Pandas поднимает KeyError только в момент вызова, а не при объявлении.
  • Производительность на больших данных — drop_duplicates строит хэш-таблицу; на DataFrame с миллионами строк и широким subset стоит профилировать или использовать polars/dask.
  • Порядок строк после keep="last" — drop_duplicates(keep="last") не сортирует DataFrame; строки остаются в исходном порядке, просто выбирается последнее вхождение по позиции в df.

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

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

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

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

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

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

Источники

  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html
  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html
←Предыдущий вопросВ чём разница между `apply()`, `map()` и `applymap()` (в Pandas 2.x переименован в `map()`)?Следующий вопрос→Что такое категориальные типы данных (categorical dtypes) в Pandas и когда их следует использовать?

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

Pandasdata-aidata-processingpandasperformance-debugging

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

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