Suppose I have this pandas.Series:
import pandas as pd
returns = pd.Series([1,2,3,4,5])
And I want to do some simple mathematics stuff on it and save the results in a new list. So I 'll explain them.
For the first item I want to calculate Variance of returns
items:
import numpy as np
def First(Ser):
return np.var(Ser)
For rest of them I want to do this:
def rest(variances , returns , i):
return 0.94 * variances[i-1] + ( 1 - 0.94 ) * (returns[i-1])**2
Then using list comprehension:
variances = [rest(variances , returns , i) for i in range(len(returns)) if i!=0 else First(returns)]
But it gives me this error:
variances = [rest(variances , returns , i) for i in range(len(returns)) if i!=0 else First(returns)]
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ^
SyntaxError: invalid syntax
How can I avoid using a for
loop for this purpose?
Full script:
import pandas as pd
import numpy as np
returns = pd.Series([1,2,3,4,5])
def First(Ser):
return np.var(Ser)
def rest(variances , returns , i):
return 0.94 * variances[i-1] + ( 1 - 0.94 ) * (returns[i-1])**2
variances = [rest(variances , returns , i) for i in range(len(returns)) if i!=0 else First(returns)]
More explaination:
What is variances
?
variances
is a list that I want to be built with the List Comprehension technique! I want to use variances
simultaneously as it is created. My basic goal is to avoid using a for
loop.
Algorithm & Expected output with use of for
loop:
import pandas as pd
import numpy as np
returns = pd.Series([1,2,3,4,5])
variances = []
for item in range(len(returns)):
if item == 0:
variances.append(np.var(returns))
else:
variances.append(0.94*variances[item-1] + (1-0.94)*(returns[item-1])**2)
print(variances)
[2.0, 1.94, 2.0636, 2.4797840000000004, 3.290996960000001]