2017-10-17 1 views
0

Ich habe eine Liste mit Listen, von denen jede eine Firma darstellt, mit darin enthaltenen EBITDA-Werten. Jetzt möchte ich das Protokoll der kehrt nehmen und eine neue Liste erstellen, die alle Log-Returns mit hat:Python: Hinzufügen von Werten zu einer Liste und anschließendes Anhängen dieser Liste an eine Liste

ln(ebitda t/ebitda t-1) 

das gewünschte Ergebnis wäre eine Liste in einer Liste, die jedes Unternehmen die Ergebnisse zusammen, wie so hält:

[[0.69314718055994529, 0.40546510810816438, 0.28768207245178085], [0.18232155679395459, 0.15415067982725836, 0.13353139262452257]] 

aber bisher bin ich immer:

[0.69314718055994529, 0.40546510810816438, 0.28768207245178085, 0.18232155679395459, 0.15415067982725836, 0.13353139262452257] 

ich auf sO eine Schleife durch jede Liste einen Weg gefunden, und die Berechnungen wie unten:

Damit die Ergebnisse jedoch brauchbar sind, muss ich in der Lage sein, sie wieder in ihre eigenen Listen zu bekommen, und ich bin nicht sicher, wie das geht.

Vielen Dank für das Lesen und jede Hilfe wird geschätzt.

+0

Was meinen Sie, indem Sie sie wieder in ihre eigenen Listen bringen? – gggg

+0

@gggg In meinem Code war das Endergebnis, dass alle Log-Returns in einer großen Liste zusammengefasst sind. Mit einer riesigen Liste gibt es keinen einfachen Weg, um zum Beispiel den Mittelwert oder den Standard jeder einzelnen Firma zu berechnen. Ich brauche die Rückgaben pro Firma in einer eigenen Liste, die jetzt mit dem Adirio-Code funktioniert. –

Antwort

0

Try this:

import numpy as np 

l = [[1, 2, 3, 4], [5, 6, 7, 8]] 

logs = [] 

for enterprise in l: 
    logs.append([]) 
    for i in range(1, len(enterprise)): 
     logs[-1].append(np.log(enterprise[i]/enterprise[i-1])) 
+0

Danke, das scheint zu funktionieren. Nur um mein Verständnis zu verstehen, führen wir eine Schleife durch die Liste, fügen eine leere Liste für jede Liste hinzu und fügen dann innerhalb dieser Liste die Protokollrückgabe an. Ist das in Ordnung? –

+0

Richtig, genau das machen wir. Die innere Schleife ist das Überspringen von Element 0 (durch Verwenden von "Bereich (1, ...)" anstelle von "Bereich (...)"), da wir den vorherigen EBITDA-Wert benötigen und das erste Element kein vorheriges EBITDA hat. Der Rest sind 2 einfache Schleifen. – Adirio

0

Dies ist eine sauberere Version von dem, was Sie haben, aber ich verstehe nicht, die Aussage über sie zurück in ihre eigenen Listen zu bekommen. Vielleicht iterieren Sie über l2 ist was Sie wollen?

import numpy as np 

l = [[1, 2, 3, 4], [5, 6, 7, 8]] 
def f(num): 
     return [np.log(num[i+1]/float(num[i])) for i in xrange(len(num)-1)] 
l2 = [f(num) for num in l] 

for logren in l2: 
     print(logren) 
Verwandte Themen