Есть ли способ переиндексировать два кадра данных (разных уровней), чтобы они имели общий индекс на всех уровнях?
Демо-версия:
Создайте базовый фрейм данных с именем «A»:
index = np.array(['AUD','BRL','CAD','EUR','INR'])
data = np.random.randint(1, 20, (5,5))
A = pd.DataFrame(data=data, index=index, columns=index)
Создайте мультииндексный фрейм данных с именем 'B':
np.random.seed(42)
midx1 = pd.MultiIndex.from_product([['Bank_1', 'Bank_2'],
['AUD','CAD','EUR']], names=['Bank', 'Curency'])
B = pd.DataFrame(np.random.randint(10,25,6), midx1)
B.columns = ['Notional']
Basic DF:
>>> Dataframe A:
AUD BRL CAD EUR INR
AUD 7 19 11 11 4
BRL 8 3 2 12 6
CAD 2 1 12 12 17
EUR 10 16 15 15 19
INR 12 3 5 19 7
MultiIndex DF:
>>> Dataframe B:
Notional
Bank Curency
Bank_1 AUD 16
CAD 13
EUR 22
Bank_2 AUD 24
CAD 20
EUR 17
Цель состоит в том, чтобы:
1) переиндексировать B, чтобы его уровень валюты включал каждую валюту в индексе A. В таком случае B будет выглядеть следующим образом (см. BRL и INR, их значения не имеют значения):
Notional
Bank Curency
Bank_1 AUD 16
CAD 13
EUR 22
BRL 0
INR 0
Bank_2 AUD 24
CAD 20
EUR 17
BRL 0
INR 0
2) переиндексировать A так, чтобы он включал каждый банк из первого уровня индекса B. А будет выглядеть так:
AUD BRL CAD EUR INR
Bank_1 AUD 7 19 11 11 4
BRL 8 3 2 12 6
CAD 2 1 12 12 17
EUR 10 16 15 15 19
INR 12 3 5 19 7
Bank_2 AUD 7 19 11 11 4
BRL 8 3 2 12 6
CAD 2 1 12 12 17
EUR 10 16 15 15 19
INR 12 3 5 19 7
Применение этого будет на гораздо больших фреймах данных, поэтому мне нужен питонский способ сделать это.
Для контекста, в конечном счете, я хочу умножить A и B. Я пытаюсь переиндексировать, чтобы получить совпадающие индексы, поскольку это было показано как чистый способ умножения фреймов данных различных уровней индекса здесь:
Панды умножают фреймы данных на мультииндекс и перекрывающиеся уровни индекса
Спасибо за любую помощь.