Python 计算中国许多公司的月度和年度股票回报率

Python 计算中国许多公司的月度和年度股票回报率,python,pandas,numpy,finance,panel-data,Python,Pandas,Numpy,Finance,Panel Data,我目前正在为我的论文做一个项目,我正在使用熊猫面板数据,其中包含多家公司,它们各自的价格跨越多个月 我想做的是: 要计算每个股票的月度回报 将这些月度回报按年计算,这样我们就可以看到每只股票的年度业绩 目前的面板数据如下所示: Date Ticker Price 03/2003 AAPL 30.214 04/2003 AAPL 32.456 05/2003 AAPL 38.002 06/2003

我目前正在为我的论文做一个项目,我正在使用熊猫面板数据,其中包含多家公司,它们各自的价格跨越多个月

我想做的是:

  • 要计算每个股票的月度回报
  • 将这些月度回报按年计算,这样我们就可以看到每只股票的年度业绩 目前的面板数据如下所示:

    Date       Ticker       Price 
    03/2003    AAPL         30.214 
    04/2003    AAPL         32.456 
    05/2003    AAPL         38.002
    06/2003    AAPL         37.328 
    ...        ...           ...   
    08/2010    TSLA         238.421 
    09/2010    TSLA         245.332 
    10/2010    TSLA         239.713
    ...        ...           ...  
    
    因此,我想在侧面创建一个列,显示每月的股价变化([t2/t1]-1)。有鉴于此,创建一个新的熊猫数据框,其中包含年度化收益和相应的股票代码


    提前感谢您的帮助:)

    这里有一个解决年度回报的方法,对于熊猫来说,有很多方法可以做到这一点。这是其中一个版本。如果您需要进一步的澄清,请告诉我。其中
    df
    是包含面板数据的数据帧

    dfYearly = df.groupby(["Ticker", "Year"])["Date"].agg(["min", "max"]).reset_index()
    dfYearly = dfYearly.merge(df[["Ticker", "Date", "Price"]], how="left", left_on=["Ticker", "min"], right_on=["Ticker","Date"])
    dfYearly.rename(columns={"Price": "Price-Begin"}, inplace=True)
    dfYearly.drop("Date", axis=1, inplace=True)
    dfYearly = dfYearly.merge(df[["Ticker", "Date", "Price"]], how="left", left_on=["Ticker", "max"], right_on=["Ticker","Date"])
    dfYearly.rename(columns={"Price": "Price-End"}, inplace=True)
    dfYearly.drop(["Date", "min", "max"], axis=1, inplace=True)
    dfYearly["Annual Return"] = np.round(dfYearly["Price-End"].values / dfYearly["Price-Begin"].values - 1, 3)
    

    这里有一个解决年度回报的办法,熊猫也有很多方法来做同样的事情。这是其中一个版本。如果您需要进一步的澄清,请告诉我。其中
    df
    是包含面板数据的数据帧

    dfYearly = df.groupby(["Ticker", "Year"])["Date"].agg(["min", "max"]).reset_index()
    dfYearly = dfYearly.merge(df[["Ticker", "Date", "Price"]], how="left", left_on=["Ticker", "min"], right_on=["Ticker","Date"])
    dfYearly.rename(columns={"Price": "Price-Begin"}, inplace=True)
    dfYearly.drop("Date", axis=1, inplace=True)
    dfYearly = dfYearly.merge(df[["Ticker", "Date", "Price"]], how="left", left_on=["Ticker", "max"], right_on=["Ticker","Date"])
    dfYearly.rename(columns={"Price": "Price-End"}, inplace=True)
    dfYearly.drop(["Date", "min", "max"], axis=1, inplace=True)
    dfYearly["Annual Return"] = np.round(dfYearly["Price-End"].values / dfYearly["Price-Begin"].values - 1, 3)
    

    您可以使用pct_change()计算回报。pd.DataFrame.pct_change(periods=n),其中n是您希望表示为一个月的任何值。嘿!你的评论肯定有帮助:)谢谢!尽管我仍然无法根据日期将面板数据分组为一年:PYou可以使用pct_change()计算回报。pd.DataFrame.pct_change(periods=n),其中n是您希望表示为一个月的任何值。嘿!你的评论肯定有帮助:)谢谢!尽管我仍然无法根据日期将面板数据分组为一年:P