Вложенный словарь в мультииндексный фреймворк, где словарные ключи – это метки столбцов

Скажем, у меня есть словарь, который выглядит так:

dictionary = {'A' : {'a': [1,2,3,4,5], 'b': [6,7,8,9,1]}, 'B' : {'a': [2,3,4,5,6], 'b': [7,8,9,1,2]}} 

и я хочу, чтобы dataframe выглядел примерно так:

  AB abab 0 1 6 2 7 1 2 7 3 8 2 3 8 4 9 3 4 9 5 1 4 5 1 6 2 

Есть ли удобный способ сделать это? Если я попробую:

 In [99]: DataFrame(dictionary) Out[99]: AB a [1, 2, 3, 4, 5] [2, 3, 4, 5, 6] b [6, 7, 8, 9, 1] [7, 8, 9, 1, 2] 

Я получаю dataframe, где каждый элемент является списком. Мне нужен мультииндекс, где каждый уровень соответствует ключам в вложенном dict и строкам, соответствующим каждому элементу в списке, как показано выше. Я думаю, что я могу работать очень грубо, но я надеюсь, что может быть что-то немного проще.

  • Запись списка списков Python в файл csv
  • Чтение блоков данных из файла в Python
  • Определить смежные области в массиве 2D numpy
  • Совместная фильтрация: неперсонализированное сходство предметов к элементу
  • Отправка формы Django в модуле Bootstrap Modal
  • Как эффективно применять pos_tag_sents () к файловому кадру pandas
  • Что такое метод __del__, Как его называть?
  • Python: как вы храните разреженную матрицу с помощью python?
  • 2 Solutions collect form web for “Вложенный словарь в мультииндексный фреймворк, где словарные ключи – это метки столбцов”

    Pandas хочет значения MultiIndex как кортежи, а не вложенные dicts. Самое простое – преобразовать словарь в нужный формат, прежде чем пытаться передать его в DataFrame:

     >>> reform = {(outerKey, innerKey): values for outerKey, innerDict in dictionary.iteritems() for innerKey, values in innerDict.iteritems()} >>> reform {('A', 'a'): [1, 2, 3, 4, 5], ('A', 'b'): [6, 7, 8, 9, 1], ('B', 'a'): [2, 3, 4, 5, 6], ('B', 'b'): [7, 8, 9, 1, 2]} >>> pandas.DataFrame(reform) AB abab 0 1 6 2 7 1 2 7 3 8 2 3 8 4 9 3 4 9 5 1 4 5 1 6 2 [5 rows x 4 columns] 
     dict_of_df = {k: pd.DataFrame(v) for k,v in dictionary.items()} df = pd.concat(dict_of_df, axis=1) 

    Обратите внимание, что порядок столбцов теряется для python <3.6

    Python - лучший язык программирования в мире.