![]() |
Need help with creating dynamic columns with for loops for stock prices - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Need help with creating dynamic columns with for loops for stock prices (/thread-39463.html) |
Need help with creating dynamic columns with for loops for stock prices - PaDat - Feb-21-2023 Dear All, I have a bunch of stock prices (about 100) and I want to dynamically compute their moving average, daily returns etc and have them in 1) the same dataframe 2) a new dataframe for each analysis. The code I have written is given below. I am struggling to create dynamically the new column names and also to copy over the computed statistics in a new frame. Can anyone help me. Thanks a lot. Best Regards, PDat import pandas as pd import matplotlib.pyplot as plt # Large list of around 100 stock prices to be imported via for e.g. a csv file. small example shown below Data={'Stock1':[1,2,3,4,5,6,7,8,9,10],'Stock2':[10,20,30,40,50,60,70,80,90,100], 'Stock3':[100,200,300,400,500,600,700,800,900,1000]} Stock_Prices=pd.DataFrame(Data) # Need to dynamically calculate the simple 3-day moving averages of the 100 stocks with new columns names as Stock1_MA, # Stock2_MA etc and 1) add them to the right in the same data frame and 2) to create a new data frame with the new columns # Manually this is done as below but needs to be done dynamically #Stock_Prices['Stock1_3D MA']=Stock_Prices['Stock1'].rolling(3).mean() #Stock_Prices['Stock2_3D MA']=Stock_Prices['Stock2'].rolling(3).mean() #Stock_Prices['Stock3_3D MA']=Stock_Prices['Stock3'].rolling(3).mean() MovingAverage = {} for i in range (0,3): MovingAverage[i] = Stock_Prices.rolling(3).mean() MA=pd.DataFrame(MovingAverage) # Code does not work and also column names remain static in MovingAverage MovingAverage RE: Need help with creating dynamic columns with for loops for stock prices - snippsat - Feb-21-2023 Can try this. import pandas as pd import matplotlib.pyplot as plt # Large list of around 100 stock prices to be imported via for e.g. a csv file. small example shown below Data = { 'Stock1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'Stock2': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], 'Stock3': [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000], } Stock_Prices = pd.DataFrame(Data) for col in Stock_Prices.columns: Stock_Prices[f"{col}_3D MA"] = Stock_Prices[col].rolling(3).mean() >>> Stock_Prices Stock1 Stock2 Stock3 Stock1_3D MA Stock2_3D MA Stock3_3D MA 0 1 10 100 NaN NaN NaN 1 2 20 200 NaN NaN NaN 2 3 30 300 2.0 20.0 200.0 3 4 40 400 3.0 30.0 300.0 4 5 50 500 4.0 40.0 400.0 5 6 60 600 5.0 50.0 500.0 6 7 70 700 6.0 60.0 600.0 7 8 80 800 7.0 70.0 700.0 8 9 90 900 8.0 80.0 800.0 9 10 100 1000 9.0 90.0 900.0To create a new data frame with only the new columns containing the moving averages,can use filter() .>>> ma = Stock_Prices.filter(regex='_3D MA$') >>> ma Stock1_3D MA Stock2_3D MA Stock3_3D MA 0 NaN NaN NaN 1 NaN NaN NaN 2 2.0 20.0 200.0 3 3.0 30.0 300.0 4 4.0 40.0 400.0 5 5.0 50.0 500.0 6 6.0 60.0 600.0 7 7.0 70.0 700.0 8 8.0 80.0 800.0 9 9.0 90.0 900.0 RE: Need help with creating dynamic columns with for loops for stock prices - PaDat - Feb-22-2023 (Feb-21-2023, 08:16 PM)snippsat Wrote: Can try this. Thanks a lot snippsat.. This is really helpful! Best Regards.. |