Повторите индекс DataFrame для каждого уникального элемента в MultiIndex

Я ищу способ, которым я могу повторить каждый элемент индекса для данного уникального элемента MultiIndex.

Итак, предположим, что я использую следующий код для создания пустых данных только с индексом:

df_x1 = pd.DataFrame({'x1':np.linspace(1,4,4)}) 
df = pd.DataFrame(index = df_x1['x1'].values)

Теперь я хотел бы создать многоуровневую индексацию со следующими данными:

df_x2 = pd.DataFrame({'x2': np.linspace(0,2,3)})

После этого я хотел бы, чтобы для каждого уникального элемента df_x2 были установлены все индексы в df_x1 как субиндексы df_2. Итак, наконец, я ожидал бы пустой фрейм данных с результатами, которые напоминают что-то вроде этого:


0  1
   2
   3
   4
1  1
   2
   3
   4
2  1
   2
   3
   4

Всего 1 ответ


Я думаю, что вам нужно MultiIndex.from_product для MultiIndex всех комбинаций:

mux = pd.MultiIndex.from_product([df_x2['x2'], df.index])
print (mux)
MultiIndex([(0.0, 1.0),
            (0.0, 2.0),
            (0.0, 3.0),
            (0.0, 4.0),
            (1.0, 1.0),
            (1.0, 2.0),
            (1.0, 3.0),
            (1.0, 4.0),
            (2.0, 1.0),
            (2.0, 2.0),
            (2.0, 3.0),
            (2.0, 4.0)],
           )

А затем перейдите к конструктору DataFrame :

df2 = pd.DataFrame(index=mux)

Или, если данные в df не пусты и необходимо повторить строки, добавьте DataFrame.reindex :

df2 = df.reindex(mux, level=1)
print (df2)
Empty DataFrame
Columns: []
Index: [(0.0, 1.0), (0.0, 2.0), (0.0, 3.0), (0.0, 4.0), (1.0, 1.0), 
        (1.0, 2.0), (1.0, 3.0), (1.0, 4.0), (2.0, 1.0), (2.0, 2.0), 
        (2.0, 3.0), (2.0, 4.0)]

print (df2.index)
MultiIndex([(0.0, 1.0),
            (0.0, 2.0),
            (0.0, 3.0),
            (0.0, 4.0),
            (1.0, 1.0),
            (1.0, 2.0),
            (1.0, 3.0),
            (1.0, 4.0),
            (2.0, 1.0),
            (2.0, 2.0),
            (2.0, 3.0),
            (2.0, 4.0)],
           )

Есть идеи?

10000