Эквивалент Python / Pandas UPSERT?

#python #pandas

#питон #панды

Вопрос:

Я пытаюсь прочитать и объединить кучу отчетов Excel (с помощью forloop) вместе в один конечный кадр данных. Каждый файл предназначен для другого месяца и содержит дату, номер предложения и количество предложений (для столбцов XYZ). Однако я нахожу, что номера котировок дублируются в файлах Excel с одной и той же датой, но разными значениями котировок.

Например, ниже у меня есть два кадра данных (или отчеты excel за сентябрь и октябрь). Я хочу объединить их вместе, но сохранить только номер цитаты «111» из отчета «Октябрь», как более поздний, и содержать дополнительную цитату для столбца «X».

Предполагая, что у меня есть отчеты Excel с именем месяца / года, есть ли простой способ сделать это? Я думаю, что логика в основном читается в каждом файле и добавляется в основной фрейм данных. Если файл содержит номер предложения и дату, такие же, как в главном файле, замените существующие значения «XYZ» для этого номера предложения значениями XYZ в более новом файле для номера предложения. Надеюсь, все это имеет смысл. Я думал, что мог бы запустить еще один внутренний forloop, но я уверен, что должен быть лучший / более эффективный способ сделать это. Большое спасибо!!

 df_september = pd.DataFrame({'Quote number': [111, 222, 333], "Quote Date": ['2021-09-08', '2021-09-08', '2021-09-08'],  'X': [2, 1, 3], 'Y': [2, 2, 0], 'Z': [4, 2, 5]})  df_october = pd.DataFrame({'Quote number': [111, 444, 555], "Quote Date": ['2021-09-08', '2021-09-11', '2021-09-11'],  'X': [3, 5, 5], 'Y': [2, 2, 0], 'Z': [4, 2, 5]})  

Комментарии:

1. вам, наверное, нужно combine_first . Пожалуйста, добавьте ожидаемый выходной кадр данных

2. Мне нравится идея мастера df, с которым вы согласны. Если вы читаете в месяцах в обратном хронологическом порядке (т. Е. в октябре, затем в сентябре), вы можете игнорировать все цитаты в новом месяце, которые уже присутствуют в главном

Ответ №1:

 df_september.append(df_october).drop_duplicates('Quote number', keep='last')