Способ объединения однокадровых и многоиндексных фреймов данных без многоиндексирования одного индексного фрейма данных. - PullRequest
0 голосов
/ 03 апреля 2020

Существует ли простой и понятный способ комбинирования мультииндексного и одноиндексного фрейма данных?

Есть вопросы, задающие подобные здесь и здесь , но оба устарели и у меня есть "грязные" решения.

У меня есть один индекс данных datafame:

df1 = pd.DataFrame({'single': [10,11,12], 'double': [7,8,9]})

   single  double
0      10       7
1      11       8
2      12       9

И я хочу, чтобы это было объединено в серию мультииндексных фреймов данных с пустыми столбцами, которые имеют разные столбцы и индексы подколонок:

df2 = pd.DataFrame(columns = pd.MultiIndex.from_product([['happy'], ['very', 'not_much']]))    
Empty DataFrame
    Columns: [(happy, very), (happy, not_much)]
    Index: []

Затем при следующем изменении я добавлю это к объединению двух приведенных выше фреймов данных и т. д .:

df3 =pd.DataFrame(columns = pd.MultiIndex.from_product([['sad'], ['always', 'never']]))
    Empty DataFrame
    Columns: [(sad, always), (sad, never)]
    Index: []

Я пробовал добавлять и объединять, но получаю Ошибка трети для обоих:

TypeError: Expected tuple, got str

Конечной целью было бы получить фрейм данных, похожий на этот:

                     happy              sad  
 single   double  very  not_much  always  never
    0      10       7
    1      11       8
    2      12       9

1 Ответ

1 голос
/ 03 апреля 2020

Я бы просто использовал concat и затем post_process столбцы:

resul = pd.concat([df1, df2, df3], axis=1, sort=False)
resul.columns = pd.MultiIndex.from_tuples(
    [('', i) if isinstance(i, str) else i for i in resul.columns])

Это дает ожидаемое:

                happy             sad      
  single double  very not_much always never
0     10      7   NaN      NaN    NaN   NaN
1     11      8   NaN      NaN    NaN   NaN
2     12      9   NaN      NaN    NaN   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...