【问题标题】:Calculating monthly and annual stock returns for many firms in Pandas在 Pandas 中计算许多公司的月度和年度股票收益
【发布时间】:2020-07-13 02:25:54
【问题描述】:

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

我想做的是:

  1. 要计算每只股票的月收益,
  2. 对这些月度回报进行年化处理,以便我们可以看到每只股票的年度累计表现。

此时的面板数据如下所示:

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 )。鉴于此,使用年化回报和相应的代码创建一个新的 pandas 数据框。

提前感谢您的帮助:)

【问题讨论】:

  • 您可以使用 pct_change() 来计算回报。 pd.DataFrame.pct_change(periods=n) 其中 n 可以是您想要表示为一个月的任何值。
  • 嘿!你的评论肯定有帮助:) 谢谢!
  • 虽然我仍然无法根据日期对面板数据进行分组以使其成为一年:P

标签: python pandas numpy finance panel-data


【解决方案1】:

这里有一个年回报的解决方案,对于 pandas,有很多方法可以做同样的事情。这是版本之一。如果您需要进一步说明,请告诉我。 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)

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 2023-04-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多