Как объединить 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 шт):
Автор решения: Алексей Р
→ Ссылка
- Транспонируем фреймы, сбрасываем индексы и транспонируем обратно - тем самым названия столбцов становятся первой строкой, а названия столбцов становятся числами 0..N - это полезно для последующего concat.
- Готовим фрейм - вставку из 5 пустых строк.
- Конкатенируем три фрейма в нужном порядке, сбрасываем индекс и переименовываем 'index' в 'индексы'
- При экспорте в 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