Help me to finish refactoring pandas script for a exponential average calc
Budget: $10 – $30 USD
I need to calculate the results from bottom to top.
The sample column are the results i'm expecting (CSV attached) from my old script below:
df['sample'] = np.nan
offset = len(df)-1
for i,r in df[::-1].iterrows():
try:
if (i+5 <= len(df)):
df.loc[df.index[i],'sample'] = df.loc[df.index[i]+1,'sample'] + (2/(5+1)) * (df.loc[df.index[i],'close'] - df.loc[df.index[i]+1,'sample'])
else:
df.loc[df.index[i],'sample'] = df.loc[offset:len(df)-1,'close'].mean()
offset -= 1
except:
pass
The goal is calculate the first four results with a simple moving average and I use this new formula:
df['exp_avg'] = np.nan
df['exp_avg'] = df['close'][::-1].head(4).rolling(window=4, min_periods=1).mean()
For the next rows I need to use this formula: Running from line 1637 to 0
prev_exp_avg(ID 1638) + (2/(5+1)) * (current_close (ID 1637) - prev_exp_avg(ID 1638)
I tryed different approachs but I can't make it work:
df['exp_avg'] = df['exp_avg'][::-1].shift(-3) + (2/(5+1)) * (df['close'][::-1].shift(-4) - df['exp_avg'][::-1].shift(-3))
Someone can help me, please! :)
The sample column are the results i'm expecting (CSV attached) from my old script below:
df['sample'] = np.nan
offset = len(df)-1
for i,r in df[::-1].iterrows():
try:
if (i+5 <= len(df)):
df.loc[df.index[i],'sample'] = df.loc[df.index[i]+1,'sample'] + (2/(5+1)) * (df.loc[df.index[i],'close'] - df.loc[df.index[i]+1,'sample'])
else:
df.loc[df.index[i],'sample'] = df.loc[offset:len(df)-1,'close'].mean()
offset -= 1
except:
pass
The goal is calculate the first four results with a simple moving average and I use this new formula:
df['exp_avg'] = np.nan
df['exp_avg'] = df['close'][::-1].head(4).rolling(window=4, min_periods=1).mean()
For the next rows I need to use this formula: Running from line 1637 to 0
prev_exp_avg(ID 1638) + (2/(5+1)) * (current_close (ID 1637) - prev_exp_avg(ID 1638)
I tryed different approachs but I can't make it work:
df['exp_avg'] = df['exp_avg'][::-1].shift(-3) + (2/(5+1)) * (df['close'][::-1].shift(-4) - df['exp_avg'][::-1].shift(-3))
Someone can help me, please! :)