Как сделать объединение мультииндекса данных с другим мультииндексированным фреймворком?

Это должно идти дальше от следующего потока: Как сделать объединение мультииндекса данных с единым индексом данных?

Мультииндексы df1 являются индексами подуровня df2.

In [1]: import pandas as pd In [2]: import numpy as np In [3]: import itertools In [4]: inner = ('a','b') In [5]: outer = ((10,20), (1,2)) In [6]: cols = ('one','two','three','four') In [7]: sngl = pd.DataFrame(np.random.randn(2,4), index=inner, columns=cols) In [8]: index_tups = list(itertools.product(*(outer + (inner,)))) In [9]: index_mult = pd.MultiIndex.from_tuples(index_tups) In [10]: mult = pd.DataFrame(index=index_mult, columns=cols) In [11]: sngl Out[11]: one two three four a 2.946876 -0.751171 2.306766 0.323146 b 0.192558 0.928031 1.230475 -0.256739 In [12]: mult Out[12]: one two three four 10 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN 20 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN In [13]: mult.ix[(10,1)] = sngl In [14]: mult Out[14]: one two three four 10 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN 20 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN # the new dataframes sng2=pd.concat([sng1,sng1],keys=['X','Y']) mult2=pd.concat([mult,mult],keys=['X','Y']) In [110]: sng2 Out[110]: one two three four X a 0.206810 -1.056264 -0.572809 -0.314475 b 0.514873 -0.941380 0.132694 -0.682903 Y a 0.206810 -1.056264 -0.572809 -0.314475 b 0.514873 -0.941380 0.132694 -0.682903 In [121]: mult2 Out[121]: one two three four X 10 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN 20 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN Y 10 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN 20 1 a NaN NaN NaN NaN b NaN NaN NaN NaN 2 a NaN NaN NaN NaN b NaN NaN NaN NaN 

код выше длинный, прокрутите прокрутку . Два многоуровневых индекса sng2 разделяют 1-й и 4-й индексы mul2. ('X', 'a'), например.

@DSM предложила решение для работы с multiindex df2 и единственным индексом df1

 mult[:] = sngl.loc[mult.index.get_level_values(2)].values 

BUt DataFrame.index.get_level_values ​​(2) может работать только для одного уровня индекса.

One Solution collect form web for “Как сделать объединение мультииндекса данных с другим мультииндексированным фреймворком?”

Непонятно, из вопроса, какой уровень индексов разделяет кадры данных. Я думаю, вам нужно пересмотреть код настройки, поскольку он дает ошибку при определении sngl . В любом случае, предположим, что mult разделяет первый и второй уровни с помощью sngl вы можете просто отказаться от второго уровня из индекса mult и index в:

 mult[:] = sngl.loc[mult.index.droplevel(2)].values 

С другой стороны, вы можете построить мультииндекс из продукта напрямую, используя pd.MultiIndex.from_product а не используя itertools

  • Фильтр по часам в Пандах
  • Python упорядочивает нерегулярные временные ряды с линейной интерполяцией
  • Pandas timeseries plot задает основные и второстепенные тики и метки x-axis
  • Группировка и фильтрация данных
  • Получение более широкой информации в встроенной консоли PyCharm
  • Прочитайте файл с разделяемой вкладкой с первым столбцом в качестве ключа, а остальные как значения
  • Заполнение интервалов времени в мультииндексе Pandas Dataframe
  • Как сохранить сплит-данные в panda в обратном порядке?
  • Python - лучший язык программирования в мире.