Вы можете:
- Добавить индекс верхнего уровня к df ( 1 для первых 2 строк и 2 для последние 2 строки) и сохраните результат, например, в wrk1 .
- Добавьте индекс верхнего уровня к df2 ( 1 для первой строки и 2 для второй строки) и сохраните результат, например, в wrk2 .
- Объедините оба вышеуказанных фрейма данных.
- Сортируйте по MultiIndex и опустите его верхнюю часть level.
Код для этого:
wrk1 = pd.concat([df.iloc[0:2], df.iloc[2:4]], keys=(1, 2))
wrk2 = pd.concat([df2[0:1], df2[1:2]], keys=(1,2))
result = pd.concat([wrk1, wrk2]).sort_index().reset_index(level=0, drop=True)
Подробности, которые следует учитывать: Полученный DataFrame содержит неуникальные записи в индексе, поэтому, возможно, вам следует оставить верхний уровень индекса (на ваш выбор).
Редактировать после вашего вопроса
Давайте посмотрим на промежуточные результаты:
wrk1 - первые 2 строки из df с индексом == 1 и вторые 2 строки с индексом == 2 :
A B
1 Tax1 1 2
Tax2 3 4
2 Tax1 5 6
Tax2 7 8
wrk2 - первые строки из df 2 с индексом == 1 и второй строкой с индексом == 2 :
A B
1 Tax3 0 0
2 Tax3 1 1
Один вариант для генерации результат - его «неполная» версия (без reset_index ):
pd.concat([wrk1, wrk2]).sort_index()
Это дает следующий результат:
A B
1 Tax1 1 2
Tax2 3 4
Tax3 0 0
2 Tax1 5 6
Tax2 7 8
Tax3 1 1
Здесь у вас есть 2 уровня индекса:
- верхний уровень - либо 1 или 2 ,
- второй уровень - скопировано из исходного источника DataFrames ,
, поэтому на верхнем уровне вы видите «источник» определенных строк (1-го или 2-го подмножества), и каждая строка имеет уникальный индекс.
Второй (полный) параметр:
pd.concat([wrk1, wrk2]).sort_index().reset_index(level=0, drop=True)
, который дает именно то, что вы хотели:
A B
Tax1 1 2
Tax2 3 4
Tax3 0 0
Tax1 5 6
Tax2 7 8
Tax3 1 1
(без верхнего уровня мультииндекса).