Как объединить 2 датафрейма с сохранением индексов и добавлением пустых строк между ними?

есть два дата фрейма

a = **индексы**  **кол1**  **кол2**  **кол 3**
     **первое**     5          6         7  
     **второе**     8          9         10

b = **индексы**  **кол4**  **кол5**  **кол 6**
    **первое**       5         6          7  
    **второе**       8         9          10

хочу получить такой дата фрейм

c =   **индексы**  **кол1**  **кол2**  **кол 3**
      **первое**      5        6          7  
      **второе**      8        9          10
      ----------------------------------------- # добавить 5 пустых строк
      -----------------------------------------
      -----------------------------------------
      -----------------------------------------
      -----------------------------------------
      **индексы**  **кол4**  **кол5**  **кол 6**
      **первое**      5         6          7  
      **второе**      8         9          10

Далее полученный датафрейм C я преобразую в эксель и экспортирую. Хотелось бы чтобы в экселе сразу было в таком виде. Пытался делать через concat, merge, join - не получилось


Ответы (1 шт):

Автор решения: Алексей Р
  1. Транспонируем фреймы, сбрасываем индексы и транспонируем обратно - тем самым названия столбцов становятся первой строкой, а названия столбцов становятся числами 0..N - это полезно для последующего concat.
  2. Готовим фрейм - вставку из 5 пустых строк.
  3. Конкатенируем три фрейма в нужном порядке, сбрасываем индекс и переименовываем 'index' в 'индексы'
  4. При экспорте в Excel отключите вывод индексов и названий колонок
df1 = pd.DataFrame({'кол1': [5, 8], 'кол2': [6, 9], 'кол 3': [7, 10]}, index=['первое', 'второе'])
df2 = pd.DataFrame({'кол4': [5, 8], 'кол5': [6, 9], 'кол 6': [7, 10]}, index=['первое', 'второе'])
df1 = df1.T.reset_index().T
df2 = df2.T.reset_index().T
df3 = pd.DataFrame(([[''] * df1.shape[1]]) * 5, columns=df1.columns, index=[''] * 5)
df = pd.concat([df1, df3, df2]).reset_index().replace({'index': {'index': 'индексы'}})
print(df.to_string(index=False, header=False))
индексы кол1 кол2 кол 3
 первое    5    6     7
 второе    8    9    10
                       
                       
                       
                       
                       
индексы кол4 кол5 кол 6
 первое    5    6     7
 второе    8    9    10
→ Ссылка