Вы написали строк с уникальными индексами , но вы их не показывали, поэтому я предполагаю, что столбец date следует рассматривать как эти индексы.
Кроме того, Я заметил, что все значения в ваших DataFrames не NaN . Если вы гарантируете это, вы можете выполнить:
df1.set_index('date').combine_first(df2.set_index('date'))\
.reset_index()
Шаги:
combine_first
- объединить оба кадра данных на основе значений в их столбцах date . reset_index
- заменить столбец date (на данный момент индекс) на «обычный» столбец.
Другой возможный подход
Если оба ваших DataFrames имеют «стандартный» индекс (последовательные числа, начинающиеся с 0 ), и вы хотите сохранить только строки для только этих уникальных индексов, вы можете выполнить:
df = pd.concat([df1, df2]).reset_index().drop_duplicates(subset='index')\
.set_index('index')
df.index.name = None
Но тогда получается:
date value v2
0 2020-01-01 df1-1 x
1 2020-01-03 df1-3 y
2 2020-01-04 df2-4 c
, поэтому отличается от того, что вы представили как , и объединено в (как я предполагаю - ваш ожидаемый результат). На этот раз вы потеряли строку с v2 == 'a' .
Еще один подход
Основан также на предположении, что все значения в ваших DataFrames не NaN :
df1.combine_first(df2)
Результат будет таким же, как и предыдущий.