Вы можете итеративно объединить все несколько столбцов в новый пустой фрейм данных.
dft = pd.DataFrame({"date": []})
N = len(df.columns)
for n in range(N // 2):
dft = dft.merge(df.iloc[:, 2*n:2*(n+1)], on='date', how='outer')
Обратите внимание, что мы определяем пустую дату столбца, чтобы объединить ее в первой итерации. Клавиша 'outer'
говорит о том, что все значения, поступающие как из левого (начального), так и правого (объединенного) фрейма данных, должны быть сохранены, а nans
добавлено при необходимости. Надеюсь, это поможет.