Как можно объединить два фрейма данных с разными мультииндексами без объединения индексов? - PullRequest
1 голос
/ 12 февраля 2020

У меня есть два кадра данных. Каждый имеет двухуровневый многоиндексный индекс. Первый уровень одинаков в каждом, но второй уровень отличается. Я хотел бы объединить фреймы данных и в итоге получить фрейм данных с трехуровневым многоиндексным индексом, где записи из первого фрейма данных будут иметь «NaN» на третьем уровне индекса, а записи из второго фрейма данных будут иметь «NaN» на втором уровне индекса. Вместо этого я получаю фрейм данных с двухуровневым индексом, где значения на втором уровне каждого фрейма данных помещаются в один и тот же уровень индекса, который принимает имя второго уровня в первом фрейме данных (см. Код ниже).

Есть ли хороший способ сделать это? Я мог бы превратить второй уровень каждого индекса в столбец, объединить, а затем поместить их обратно в индекс, но это кажется мне окольным путем.

df1 = pd.DataFrame({'index-1':['a1','b1','c1','d1'], 'index-2':['a2','b2','c2','d2'], 'values':[1,2,3,4]})
df2 = pd.DataFrame({'index-1':['a1','b1','c1','d1'], 'index-3':['a3','b3','c3','d3'], 'values':[5,6,7,8]})

df1.set_index(['index-1','index-2'], inplace=True)
df2.set_index(['index-1','index-3'], inplace=True)

pd.concat([df1, df2])

Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2020

Будет проще сбросить индекс на двух входных фреймах данных, объединить их, а затем снова установить индекс:

pd.concat([df1.reset_index(), df2.reset_index()], sort=False) \
    .set_index(['index-1', 'index-2', 'index-3'])

Результат:

                         values
index-1 index-2 index-3        
a1      a2      NaN           1
b1      b2      NaN           2
c1      c2      NaN           3
d1      d2      NaN           4
a1      NaN     a3            5
b1      NaN     b3            6
c1      NaN     c3            7
d1      NaN     d3            8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...