'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