2つのデータフレーム(異なるレベルの)を再インデックスして、すべてのレベルで共通のインデックスを共有する方法はありますか?
デモ:
「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」という名前のMultiIndexデータフレームを作成します。
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']
基本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のインデックスの最初のレベルの各バンクを含めます。 Aは次のようになります。
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
これを適用するのははるかに大きなデータフレームになるので、Pythonでこれを行う方法が必要です。
コンテキストについては、最終的にAとBを乗算したいと思います。さまざまなインデックスレベルのデータフレームを乗算するクリーンな方法としてここに示されているように、インデックスを再作成して一致するインデックスを取得しようとしています 重複するインデックスレベル
助けてくれてありがとう.
reindex
を使用してBを取得するには
B.reindex( pd.MultiIndex.from_product([B.index.levels[0],
A.index], names=['Bank', 'Curency']),fill_value=0)
Out[62]:
Notional
Bank Curency
Bank_1 AUD 16
BRL 0
CAD 13
EUR 22
INR 0
Bank_2 AUD 24
BRL 0
CAD 20
EUR 17
INR 0
concat
を使用してAを取得するには
pd.concat([A]*2,keys=B.index.levels[0])
Out[69]:
AUD BRL CAD EUR INR
Bank
Bank_1 AUD 10 5 10 14 1
BRL 17 1 14 10 8
CAD 3 7 3 15 2
EUR 17 1 15 2 16
INR 7 15 6 7 4
Bank_2 AUD 10 5 10 14 1
BRL 17 1 14 10 8
CAD 3 7 3 15 2
EUR 17 1 15 2 16
INR 7 15 6 7 4