Multiplikation zweier DataFrames mit Multiindex

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
psysxet
User
Beiträge: 4
Registriert: Montag 20. September 2021, 17:17

Hallo Forum,

ich bekomme es einfach nicht hin:
Ich habe zwei DataFrames (Pandas) mit

DF1: Spalte1 | Spalte2 | Spalte3
Datum1 xyz
Datum2
Datum3

DF2: DritteDimension1 DritteDimension2 DritteDimension3
Spalte1 abc
Spalte2
Spalte3

als Ergebnis einer Multiplikation der Werte hätte ich gerne:

MultiIndexDF: Spalte1 Spalte2 Spalte 3
DritteDimension1, Datum1 (xyz*abc)
Datum2
Datum3
DritteDimension2, Datum1
Datum2
Datum3

Wie kriege ich das hin?
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

Hallo @psysxet

ehrlich gesagt habe ich nicht ganz verstanden, was Du tun möchtest. Da ich selbst noch Anfänger bin, mag das aber auch daran liegen.

Wäre es ggf. möglich, dass Du die DataFrames mit ein paar wenigen synthetischen Daten mal in ein Code-Schnipsel packst?
psysxet
User
Beiträge: 4
Registriert: Montag 20. September 2021, 17:17

na klar, gerne:

DF1 beinhaltet die Anzahl an Kontrakten zu einem ETF, getrennt nach Fonds:

Code: Alles auswählen

DF1.Index:
Index(['iShares Core DAX UCITS', 'Amundi ETF Nasdaq-100 UCITS',
       'iShares MSCI World UCITS Dist', 'Source MSCI World UCITS',
       'iShares MSCI Russia Adr/Gdr UCITS', 'iShares TecDAX UCITS',
       'iShares Core MSCI Emerging Markets IMI UCITS',
       'Lyxor STOXX Europe 600 DR Monthly Hedged D-EUR',
       'iShares Listed Private Equity UCITS'])
       

Code: Alles auswählen

DF1.Columns:
Index(['HeikeFonds', 'RobinFondsVol2', 'HochzeitFonds', 'RobinFondsVol1',
       'RobinETFplan', 'HeikeFondsVol2']
 
DF2 beeinhaltet den historischen Schlusskurs eines ETF zu einem Datum.

Code: Alles auswählen

DF2.Index:
DatetimeIndex(['2021-09-20', '2021-09-17', '2021-09-16', '2021-09-15',
               '2021-09-14', '2021-09-13', '2021-09-10', '2021-09-09',
               '2021-09-08', '2021-09-07',
               ...
               '2020-01-15', '2020-01-14', '2020-01-13', '2020-01-10',
               '2020-01-09', '2020-01-08', '2020-01-07', '2020-01-06',
               '2020-01-03', '2020-01-02'] 

Code: Alles auswählen

DF2.columns: 
Index(['iShares Core DAX UCITS', 'Amundi ETF Nasdaq-100 UCITS',
       'iShares MSCI World UCITS Dist', 'Source MSCI World UCITS',
       'iShares MSCI Russia Adr/Gdr UCITS', 'iShares TecDAX UCITS',
       'iShares Core MSCI Emerging Markets IMI UCITS',
       'Lyxor STOXX Europe 600 DR Monthly Hedged D-EUR'])
 
Nun, wie man sich mittlerweile wahrscheinlich denken kann, möchte ich, nach Fonds getrennt, die Anzahl Kontrakte mit dem Schlusskurs multiplizieren. Erhalte dadurch den Wert der ETF Position, aufgeschlüsselt nach FOND. Das hätte ich gerne als Ergebnis:

Code: Alles auswählen

HeikeFonds
['iShares Core DAX UCITS', 'Amundi ETF Nasdaq-100 UCITS',
       'iShares MSCI World UCITS Dist', 'Source MSCI World UCITS',
       'iShares MSCI Russia Adr/Gdr UCITS', 'iShares TecDAX UCITS',
       'iShares Core MSCI Emerging Markets IMI UCITS',
       'Lyxor STOXX Europe 600 DR Monthly Hedged D-EUR']
RobinFondsVol2
['iShares Core DAX UCITS', 'Amundi ETF Nasdaq-100 UCITS',
       'iShares MSCI World UCITS Dist', 'Source MSCI World UCITS',
       'iShares MSCI Russia Adr/Gdr UCITS', 'iShares TecDAX UCITS',
       'iShares Core MSCI Emerging Markets IMI UCITS',
       'Lyxor STOXX Europe 600 DR Monthly Hedged D-EUR']
 
usw.
Hintergrund ist ganz einfach: Kaufe ich im Depot 10 DAX Kontrakte, 7 davon für mich, 3 davon für meine Freundin, so wird mir diese Position summiert aufgezeigt. Es gibt keine Möglichkeit in meinem Broker einzelne Positionen zu gruppieren. Das ist natürlich ätzend.
psysxet
User
Beiträge: 4
Registriert: Montag 20. September 2021, 17:17

Ahja, ich verstehe langsam meine Verwirrung. Ich habe bisher den Begriff "MultiIndex" falsch benutzt. Was ich meinte ist eigentlich: Ein Panda mit einem MultiIndex.
Den Multiindex konnte ich nun erstellen via:
historischer_wert_index=pd.MultiIndex.from_product([DF1,DF2.T], names = ['Fonds','Date'])

Wie setze ich nun einem neuen DataFrame diesen Index zu und fülle die Werte mit dem Produkt aus DF1 und DF2 ?
psysxet
User
Beiträge: 4
Registriert: Montag 20. September 2021, 17:17

Zur Info: Das Thema kann zu, ich habe es einfach nicht geschafft und aufgegeben. Ich habe es jetzt über dictories gelöst, die DF werden jetzt in Excel zwischengespeichert.
Multiindex werde ich einfach niemals verstehen.
Antworten