У меня есть два мультииндексных фрейма данных, которые я хочу объединить в общий столбец на втором уровне. Попытка внешнего слияния двух dfs возвращает неожиданный KeyError
в окончательном ключе слияния.
Я проверил слияние без мультииндекса, и оно отлично работает. Я также изменил порядок слияния, и это, кажется, всегда происходит в параметре right_on
. Наконец, я подтвердил, что могу получить доступ к ошибочному ряду ключей вне слияния.
слияние с одним индексом работает нормально:
[IN]:
df1 = pd.DataFrame({'A1': ['A1', 'A1', 'A2', 'A3'],
'B': ['121', '345', '123', '146'],
'C': ['K0', 'K1', 'K0', 'K1']})
df2 = pd.DataFrame({'A2': ['A1', 'A3'],
'X': ['B0', 'B3'],
'Y': ['121', '345'],
'Z': ['D0', 'D1']})
fine_merge = pd.merge(df1,df2,how='outer',left_on='A1', right_on='A2')
print(fine_merge)
[OUT]:
A1 B C A2 X Y Z
0 A1 121 K0 A1 B0 121 D0
1 A1 345 K1 A1 B0 121 D0
2 A2 123 K0 NaN NaN NaN NaN
3 A3 146 K1 A3 B3 345 D1
Многоиндексный ключ работает отлично:
[IN]:
df1.columns = pd.MultiIndex.from_tuples([('left_header', c) for c in df1.columns])
df2.columns = pd.MultiIndex.from_tuples([('right_header', c) for c in df2.columns])
print(df2['right_header','A2'])
[OUT]:
0 A1
1 A3
Name: (right_header, A2), dtype: object
но слияние нескольких индексов возвращает KeyError
[IN]:
error_merge = pd.merge(df1,df2, how='outer', left_on=['left_header','A1'], right_on=('right_header','A2'))
print(error_merge)
[OUT]:
KeyError: 'A2'
Меня это довольно смущает, особенно если учесть, что, если я отменю слияние или что-то такое, что df1
является правильным, а right_on==['left_header','A1']
, то полученная ошибка будет KeyError: 'A1'
Заранее спасибо за помощь.
edit: объединить, объединить, concat all и получить следующий результат:
combined
left_header right_header
A1 B C A2 X Y Z
0 A1 121 K0 A1 B0 121.0 D0
1 A1 345 K1 A3 B3 345.0 D1
2 A2 123 K0 NaN NaN NaN NaN
3 A3 146 K1 NaN NaN NaN NaN