'Please how can i use generate a formula in pandas
df['weight_MA']= (Pn ∗W1 )+(Pn−1 ∗W2 )+(Pn−2 ∗W3 )... / ∑W
where:
P = Price for the period
n = The most recent period, n-1 is the prior period,
and n-2 is two periods prior
W = The assigned weight to each period, with the
highest weight going first and then descending linearly
based on the number of periods being used
Please how can i use that formula in pandas to get something like
((P5 * 5)+(P4 *4)+(P3 *3)+(P2 *2)+(P1 *1)) / (5+4+3+2+1)
Let’s say that the price of this stock fluctuates as so:
Day 5: $90.90
Day 4: $90.36
Day 3: $90.28
Day 2: $90.83
Day 1: $90.91
df['weight_MA'] = ((90.90 *5)+(90.36 *4)+(90.28 *3)+(90.83 *2)+(90.91 *1)) / (5+4+3+2+1) =
Solution 1:[1]
weight = numpy.array([1,2,3,4,5])
df = pandas.DataFrame([90.91,90.83,90.28,90.36,90.90])
df['weight_MA'] = df.rolling(weight.shape[0]).apply(lambda x: numpy.sum(x * weight) / numpy.sum(weight))
rolling gives you a dataframe consisting of the previous n row value. Then, applying a lambda function to multiply df and your weight, and divided by the sum of weight.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
