Как объединить фреймы данных pandas с MultiIndexes в столбцахPython

Программы на Python
Ответить
Anonymous
 Как объединить фреймы данных pandas с MultiIndexes в столбцах

Сообщение Anonymous »

Я пытаюсь объединить два кадра данных pandas, в столбцах которых есть MultiIndex. Это работает, как и ожидалось, когда нет повторяющихся столбцов, однако, когда есть повторяющиеся столбцы, он просто помечает верхний уровень индекса в правом фрейме данных как дублированный, даже если здесь есть отдельные столбцы.
Пример всех отдельных столбцов:

Код: Выделить всё

import pandas as pd

foo = pd.DataFrame({('one', 'a'): [1, 2, 3], ('one', 'b'): ['c', 'd', 'e']})
bar = pd.DataFrame({('one', 'a'): [1, 3], ('one', 'c'): ['bat', 'baz']})
foo.merge(bar, on=[('one', 'a')], how='left', suffixes=['', '.duplicated'])
Это приводит к ожидаемому результату:

Код: Выделить всё

  one
a  b    c
0   1  c  bat
1   2  d  NaN
2   3  e  baz
Пример дублированных столбцов:

Код: Выделить всё

import pandas as pd

foo = pd.DataFrame({('one', 'a'): [1, 2, 3], ('one', 'b'): ['c', 'd', 'e']})
bar = pd.DataFrame({('one', 'a'): [1, 3], ('one', 'b'): ['c', 'e'], ('one', 'c'): ['bat', 'baz']})
foo.merge(bar, on=[('one', 'a')], how='left', suffixes=['', '.duplicated'])
Фактический результат:

Код: Выделить всё

  one    one.duplicated
a  b              b    c
0   1  c              c  bat
1   2  d            NaN  NaN
2   3  e              e  baz
Ожидаемый/желаемый результат:

Код: Выделить всё

  one         one.duplicated
a  b    c              b
0   1  c  bat              c
1   2  d  NaN            NaN
2   3  e  baz              e
Должно быть элегантное решение этой проблемы, но я его не нахожу. Единственные решения, которые я могу найти до сих пор, включают преобразование MultiIndex в сглаженную строку и последующий возврат ее обратно - довольно много усилий для чего-то, что очень похоже на ошибку в дизайне слияния. Меня также беспокоит возможность появления ошибок в этом процессе, поскольку фреймы данных, с которыми будет работать код, не имеют никаких гарантий относительно значений в индексах и количества столбцов. Все, на что я могу рассчитывать, это форма фрейма данных
(Я также пробовал использовать объединение вместо слияния, но это полностью искажает данные и становится непригодным для использования)

Подробнее здесь: https://stackoverflow.com/questions/798 ... he-columns
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»