Search code examples
pythonpandasdataframefinance

How to loop over unique ticker values in a Pandas DataFrame?


I have the dataframe below, which has several stocks value for about 200 companies, I am trying to find a way to for loop and build a new dataframe which includes these companies' different yearly feature

Date       Symbol    Open   High    Low     Close   Volume      Daily Return
2016-01-04  AAPL    102.61  105.37  102.00  105.35  67281190    0.025703
2016-01-05  AAPL    105.75  105.85  102.41  102.71  55790992    0.019960
2016-12-28  AMZN    776.25  780.00  770.50  772.13  3301025     0.009122
2016-12-29  AMZN    772.40  773.40  760.85  765.15  3158299     0.020377

I have tried different way, the closest I have come is:

stocks_features = pd.DataFrame(data=stocks_data.Symbol.unique(), columns = ['Symbol'])
stocks_features['Max_Yearly_Price'] = stocks_data['High'].max()
stocks_features['Min_Yearly_Price'] = stocks_data['Low'].min()
stocks_features

But it gives me the same values for all stocks:

Symbol  Max_Yearly_Price    Min_Yearly_Price
AAPL         847.21            89.47
AMZN         847.21            89.47

What I am doing wrong, how can I accomplish this?


Solution

  • By using groupby agg

    df.groupby('Symbol').agg({'High':'max','Low':'min'}).\
        rename(columns={'High':'Max_Yearly_Price','Low':'Min_Yearly_Price'})
    Out[861]: 
            Max_Yearly_Price  Min_Yearly_Price
    Symbol                                    
    AAPL              105.85            102.00
    AMZN              780.00            760.85