TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #71 2.29K
✅ Расскажу об интересном кейсе случае. Есть у нас на работе таблица, в которую каждый день добавляются данные. Столбцов там много с разной инфой. Чтобы был понятен алгоритм приведу вот такой пример:

data – дата, account_id – номер клиента, info – определенная информация из списка, у одного клиента может быть таких несколько, поэтому в таблице бывает представлено двумя и более строками, turnover – оборот клиента за определенный период времени.
Создадим пример датафрейма:

data = {'data':['2023-07-27','2023-07-27','2023-07-27','2023-07-27'],
'account_id': [111,111,333,444],
'info':['параметр 1','параметр 2','параметр 3','параметр 2'],
'turnover': [100, 200,300,400]}
df_old = pd.DataFrame(data)

Раньше таблица дополнялась снизу новыми данными на определенную дату и в конце концов стала очень большой. Поэтому было решено ее ОПТИМИЗИРОВАТЬ! Но сложность была в том, что если у account_id есть параметр info на старую дату, которого не было в новой выгрузке, то эту старую строку и нужно оставлять со всеми сопутствующими столбцами.
Пример таблицы, которую добавляем к той первоначальной
df_new = pd.DataFrame({'data':['2023-07-28','2023-07-28','2023-07-28','2023-07-28'],
'account_id': [111,555,666,777],
'info':['параметр 1','параметр 2','параметр 3','параметр 2'],
'turnover': [500, 600,700,800]})

💡Я придумала вот такой способ. Выкачиваю файл, который был в гуглдоке, подтягиваю его в юпитер и соединяю с новой таблицей именно в этой последовательности (сначала новый датафрейм, а потом старый):

df_all = pd.concat([df_new, df_old], ignore_index = True, sort = False)

А потом убираю дубликаты по двум важным столбцам: account_id и info
df_final = df_all.drop_duplicates(subset=['account_id', 'info'])

И в результате получается то, что нужно. На картинке видно, что у аккаунта 111 есть строка с параметром 2, датированная 27 июля (то есть ее оставили нетронутой) и есть строка с аккаунтом 111 и параметром 1 уже новая от 28 июля.
  • 👍 14
More from @analysts_world
  1. Sep 21, 2026📊 Задачка с собеседования Ну что, по итогам голосования большинство хотят задачки и sql.…
  2. Sep 14, 2026Post #345
  3. Sep 14, 2026Что-то я тут прям зачастила с A/B тестами 😅 Смотрю на последние посты и такое чувство, чт…
  4. Sep 1, 2026🎒 С 1 сентября, друзья! Сегодня как раз отправила своих детей в школу – и вот это чувство…
  5. Aug 24, 2026Вне выборки Обычно здесь про SQL, Python и AB-тесты. Но не всё, что важно, попадает в выбо…
  6. Aug 20, 2026Fuckup Night от создателей Trisigma, Ares и karpov.courses Согласитесь, ивенты, где все де…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →