объединить один фрейм данных pandas с другим и удалить значение, которое присутствует в первом фрейме данных, из второго фрейма данных

#python #pandas

#python #pandas

Вопрос:

У меня есть два фрейма данных pandas, как показано ниже :-

DF1

      date1      hours   value    Field  count1
1   2021-01-15   9       eps       EPS          770915
2   2021-01-22   9       eps       EPS          797503
 

DF2

         date1       hours   value      Field    count1
  0     2021-01-09   9       eps        EPS     0
  1     2021-01-10   9       eps        EPS     0
  2     2021-01-11   9       eps        EPS     0
  3     2021-01-12   9       eps        EPS     0
  4     2021-01-13   9       eps        EPS     0
  5     2021-01-14   9       eps        EPS     0
  6     2021-01-15   9       eps        EPS     0
  7     2021-01-16   9       eps        EPS     0
  8     2021-01-17   9       eps        EPS     0
  9     2021-01-18   9       eps        EPS     0
 10     2021-01-19   9       eps        EPS     0
 11     2021-01-20   9       eps        EPS     0
 12     2021-01-21   9       eps        EPS     0
 13     2021-01-22   9       eps        EPS     0
 

Я хочу вывод, как показано ниже :-

Результат :-

         date1       hours   value      Field    count1
  0     2021-01-09   9       eps        EPS     0
  1     2021-01-10   9       eps        EPS     0
  2     2021-01-11   9       eps        EPS     0
  3     2021-01-12   9       eps        EPS     0
  4     2021-01-13   9       eps        EPS     0
  5     2021-01-14   9       eps        EPS     0
  6     2021-01-15   9       eps        EPS     770915
  7     2021-01-16   9       eps        EPS     0
  8     2021-01-17   9       eps        EPS     0
  9     2021-01-18   9       eps        EPS     0
 10     2021-01-19   9       eps        EPS     0
 11     2021-01-20   9       eps        EPS     0
 12     2021-01-21   9       eps        EPS     0
 13     2021-01-22   9       eps        EPS     797503
 

типы данных столбцов DF1 и DF2 похожи :-

 date1          object
hours           int64 
value          object
Field          object
count1          int64
 

DF2 всегда содержит 14 дней, а DF1 содержит переменные дни, которые находятся в диапазоне от 1 до 14. Я хочу, чтобы результирующий фрейм данных содержал поле отсутствующих дней с нулем из 2-го фрейма данных.

Ответ №1:

Использовать concat с DataFrame.drop_duplicates :

 df = (pd.concat([DF1, DF2], ignore_index=True)
        .drop_duplicates(['date1','hours','value','Field']))
 

При необходимости сортировка вывода:

 df = (pd.concat([DF1, DF2], ignore_index=True)
        .drop_duplicates(['date1','hours','value','Field'])
        .sorT_values(['date1','hours','value','Field']))
 

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

1. Спасибо за ответ @jezrael. Я попробовал ваш метод, но он не работает. Он возвращает дублирующие значения из обоих фреймов.

2. @vishwajeetMane — Проблема должна заключаться в том, какие столбцы проверяются на наличие дубликатов? Возможно, нужно .drop_duplicates(['date1'])) только.

3. @vishwajeetMane — Протестировано с образцами данных и работает отлично, поэтому в реальных данных есть некоторая разница.