【问题标题】:Pandas Panel Data - Identifying year gap and calculating returnsPandas 面板数据 - 识别年份差距和计算回报
【发布时间】:2020-04-13 15:27:17
【问题描述】:

我正在处理财务信息的大型面板数据,但是这些值有点参差不齐。我正在尝试计算面板数据中每只股票每年之间的回报。但是,由于缺少值,有时公司会出现年份差距,从而使:df['stock_ret'] = df.groupby(['tic'])['stock_price'].pct_change() 无法实践,因为它是错误的。 df 看起来像这样(仅举一个例子):

       datadate      month     fyear    ticker    price
0    31/12/1998         12      1998      AAPL   188.92
1    31/12/1999         12      1999      AAPL   197.44
2    31/12/2002         12      2002      AAPL   268.13
3    31/12/2003         12      2003      AAPL   278.06
4    31/12/2004         12      2004      AAPL   288.35
5    31/12/2005         12      2005      AAPL   312.23
6    31/05/2008          5      2008      TSLA    45.67
7    31/05/2009          5      2009      TSLA    38.29
8    31/05/2010          5      2010      TSLA    42.89
9    31/05/2011          5      2011      TSLA    56.03
10   31/05/2014          5      2014      TSLA   103.45
..       ...            ..       ..        ..      ..

我正在寻找的是一段代码,它可以让我了解(对于每个公司)数据是否存在任何差距,并计算两个不同系列的回报。就像这样:

       datadate      month     fyear    ticker    price   return
0    31/12/1998         12      1998      AAPL   188.92      NaN 
1    31/12/1999         12      1999      AAPL   197.44   0.0451
2    31/12/2002         12      2002      AAPL   268.13      NaN
3    31/12/2003         12      2003      AAPL   278.06   0.0370
4    31/12/2004         12      2004      AAPL   288.35   0.0370
5    31/12/2005         12      2005      AAPL   312.23   0.0828
6    31/05/2008          5      2008      TSLA    45.67      NaN
7    31/05/2009          5      2009      TSLA    38.29  -0.1616
8    31/05/2010          5      2010      TSLA    42.89   0.1201
9    31/05/2011          5      2011      TSLA    56.03   0.3063
10   31/05/2014          5      2014      TSLA   103.45      NaN
..       ...            ..       ..        ..      ..

如果您对如何处理此问题有任何其他建议,请随时分享您的知识:) 我有点缺乏经验,所以我相信您的建议会有所帮助!

提前谢谢你们!

【问题讨论】:

    标签: python pandas data-science finance panel-data


    【解决方案1】:

    您可以创建一个掩码来判断去年是否存在,然后使用 pct 更改更新这些年份:

    df['return'] = np.nan
    mask = df.groupby('ticker')['fyear'].apply(lambda x: x.shift(1)==x-1)
    df.loc[mask,'return'] = df.groupby('ticker')['price'].pct_change()
    

    【讨论】:

    • 嘿@Bruno Mello,抱歉,您分享的代码不起作用:P KeyError: 'fyear' 是 python 回馈的!你知道怎么回事吗?
    • 您的年份栏的名称是那个,不是吗? @tigio_33
    • 是的,我的专栏名称是“fyear”,这就是为什么我觉得很奇怪:P 如果可以的话,我会附上错误的屏幕截图,因为它的描述很长。我的意思是,你在笔记本上试过了吗? @布鲁诺梅洛
    • 是的,我做到了!它工作正常,错误发生在哪里?在x['fprice']part 还是在行尾?
    • x['fprice']?代码中没有这样的命令:P 它告诉我:'在处理上述异常期间,发生了另一个异常'@Bruno Mello
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2020-07-26
    • 2020-07-28
    • 2013-02-26
    • 2020-07-28
    • 2017-10-18
    相关资源
    最近更新 更多