Pandas concat и merge: объединение двух батчей данных
concat складывает таблицы по оси, а merge связывает строки по ключам. В пайплайне они решают разные задачи: сначала собрать события из батчей, затем обогатить подготовленный результат справочником.
Проверьте уникальность ключей до соединения и число строк после него. В итоговой функции важны не только значения, но и порядок столбцов, типы и согласованное правило удаления повторов из разных батчей.
Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «NumPy и pandas: практический тренажёр».
Интеграция двух батчей: concat → дедупликация → агрегация → merge → финальная схема
Вы реализуете функцию integrate_batches, которая принимает два батча событий одинаковой схемы и таблицу-измерение, выполняет полный пайплайн интеграции и возвращает финальный DataFrame по заданной спецификации.
Что уже дано
Проверяющая система вызывает integrate_batches(batch1, batch2, dim_table), передавая три готовых pd.DataFrame:
batch1иbatch2— два батча событий одинаковой схемы:'event_id'(int),'source'(str),'amount'(float). Оба батча могут содержать пересекающиеся бизнес-ключи('event_id', 'source'): более поздняя версия события находится вbatch2.dim_table— таблица-измерение со столбцами'source'(str) и'channel'(str). Уникальна по'source'.
Никаких файлов, глобальных переменных и состояния из других уроков нет.
Что нужно сделать
Реализуйте функцию integrate_batches(batch1, batch2, dim_table), выполняющую ровно пять шагов.
Шаг 1. Склейка батчей.
Объедините batch1 и batch2 через pd.concat([batch1, batch2], ignore_index=True). Сохраните в combined.
Шаг 2. Дедупликация по бизнес-ключу.
Удалите дубли по составному ключу ['event_id', 'source'], оставив последнее вхождение (keep='last') — оно соответствует более актуальной записи из batch2. Сбросьте индекс через reset_index(drop=True). Сохраните в deduped.
Шаг 3. Агрегация.
Сгруппируйте deduped по 'source' с as_index=False и вычислите за один вызов .agg():
event_count=('event_id', 'count')— число уникальных событий по источнику;total_amount=('amount', 'sum')— суммарная сумма.
Сохраните в agg.
Шаг 4. Merge с validate.
Соедините agg и dim_table через pd.merge с параметрами:
on='source'how='left'validate='many_to_one'
Сохраните в result.
Шаг 5. Финальная спецификация.
Оставьте в result ровно эти столбцы в указанном порядке:
['source', 'channel', 'event_count', 'total_amount']
Отсортируйте по 'total_amount' по убыванию и сбросьте индекс через reset_index(drop=True).
Верните итоговый result.
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система вызывает integrate_batches(batch1, batch2, dim_table) и проверяет возвращаемое значение. Функция принимает три аргумента — готовые pd.DataFrame. Функция должна вернуть pd.DataFrame с четырьмя столбцами в порядке спецификации, отсортированный по 'total_amount' по убыванию, с чистым RangeIndex.
Пример использования
import pandas as pd
batch1 = pd.DataFrame({
'event_id': [1, 2, 3],
'source': ['web', 'app', 'web'],
'amount': [100.0, 200.0, 50.0],
})
batch2 = pd.DataFrame({
'event_id': [2, 4],
'source': ['app', 'app'],
'amount': [250.0, 300.0],
})
dim_table = pd.DataFrame({
'source': ['web', 'app'],
'channel': ['organic', 'paid'],
})
result = integrate_batches(batch1, batch2, dim_table)
print(list(result.columns))
print(result[['source', 'total_amount']].values.tolist())
Результат:
['source', 'channel', 'event_count', 'total_amount']
[['app', 550.0], ['web', 150.0]]
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Итоговый практикум — часть 2: агрегация, соединение и финальная схема — задача по NumPy и pandas
- Отчёт в pandas: groupby, agg и merge со справочником
- Pandas duplicated и dropduplicates: аудит бизнес-ключа
- pandas merge и дубли ключей: диагностика зерна данных
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
