Berechnung ausführen für Elemente einer Liste
Verfasst: Sonntag 27. Oktober 2019, 17:25
Hallo zusammen,
ich bin neu hier und auch bei der Programmierung mit Python, daher möchte ich mich vorweg schonmal für meine vermutlich amateurhaften Fragen entschuldigen.
Nun zu meinem konkreten Problem:
Ich habe für verschiedene Zeitreihen die logarithmierten Renditen berechnet und in Spalten ausgegeben. Jede Spalte enthält die log returns für eine Aktie. Nun würde ich gerne für jede einzelne Aktie auf Basis der jeweiligen log returns verschiedene Kennzahlen berechnen.
Ich habe die einzelnen Aktien in eine Liste gepackt. Die Liste besteht aus den Überschriften für die Spalten mit den log returns. Meine Liste heißt "stockslistLogReturn". Mein Dataframe heißt "stockprices". Mein Ansatz ist nun für das Shortfall Risk folgender:
Mein Problem ist nun, dass ich folgende Fehlermeldung erhalte:
ML FP Equity LogReturn und BKT SM Equity LogReturn sind die beiden Elemente in der Liste, für die ich jeweils das Shortfall Risk berechnen möchte. Wenn ich in der ursprünglichen Formel allerdings "stockslistLogReturn" ersetze mit "'ML FP Equity LogReturn','BKT SM Equity LogReturn'"
Es funktioniert, wenn ich den Code also wie folgt laufen lasse:
Warum funktioniert es nicht, wenn ich die Liste im Code angebe?
Was müsste ich ändern, damit es mit der Angabe der Liste ebenfalls funktioniert?
ich bin neu hier und auch bei der Programmierung mit Python, daher möchte ich mich vorweg schonmal für meine vermutlich amateurhaften Fragen entschuldigen.
Nun zu meinem konkreten Problem:
Ich habe für verschiedene Zeitreihen die logarithmierten Renditen berechnet und in Spalten ausgegeben. Jede Spalte enthält die log returns für eine Aktie. Nun würde ich gerne für jede einzelne Aktie auf Basis der jeweiligen log returns verschiedene Kennzahlen berechnen.
Ich habe die einzelnen Aktien in eine Liste gepackt. Die Liste besteht aus den Überschriften für die Spalten mit den log returns. Meine Liste heißt "stockslistLogReturn". Mein Dataframe heißt "stockprices". Mein Ansatz ist nun für das Shortfall Risk folgender:
Code: Alles auswählen
stockprices_SFR = stockprices[[stockslistLogReturn]].apply(
lambda x:numpy.where(x<0,1,0)).sum()/(stockprices.shape[0]-1)
stockprices_SFR
Code: Alles auswählen
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-10-0a257b083405> in <module>
1 #
2 #
----> 3 stockprices_SFR = stockprices[[stockslistLogReturn]].apply(
4 lambda x:numpy.where(x<0,1,0)).sum()/(stockprices.shape[0]-1)
5 stockprices_SFR
C:\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
2932 key = list(key)
2933 indexer = self.loc._convert_to_indexer(key, axis=1,
-> 2934 raise_missing=True)
2935
2936 # take() does not accept boolean indexers
C:\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter, raise_missing)
1352 kwargs = {'raise_missing': True if is_setter else
1353 raise_missing}
-> 1354 return self._get_listlike_indexer(obj, axis, **kwargs)[1]
1355 else:
1356 try:
C:\Anaconda3\lib\site-packages\pandas\core\indexing.py in _get_listlike_indexer(self, key, axis, raise_missing)
1159 self._validate_read_indexer(keyarr, indexer,
1160 o._get_axis_number(axis),
-> 1161 raise_missing=raise_missing)
1162 return keyarr, indexer
1163
C:\Anaconda3\lib\site-packages\pandas\core\indexing.py in _validate_read_indexer(self, key, indexer, axis, raise_missing)
1244 raise KeyError(
1245 u"None of [{key}] are in the [{axis}]".format(
-> 1246 key=key, axis=self.obj._get_axis_name(axis)))
1247
1248 # We (temporarily) allow for some missing keys with .loc, except in
KeyError: "None of [Index([('ML FP Equity LogReturn', 'BKT SM Equity LogReturn')], dtype='object')] are in the [columns]"
Es funktioniert, wenn ich den Code also wie folgt laufen lasse:
Code: Alles auswählen
stockprices_SFR = stockprices[['ML FP Equity LogReturn','BKT SM Equity LogReturn']].apply(
lambda x:numpy.where(x<0,1,0)).sum()/(stockprices.shape[0]-1)
stockprices_SFR
Was müsste ich ändern, damit es mit der Angabe der Liste ebenfalls funktioniert?