Pandas 面板数据 - 识别年差并计算 returns
Pandas Panel Data - Identifying year gap and calculating returns
我正在处理大量的财务信息面板数据,但是这些值有点参差不齐。我正在尝试计算面板数据中每只股票每年之间的 return。然而,由于缺失值,有时公司会有年份差距,使得: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
.. ... .. .. .. ..
我正在寻找的是一段代码,它可以让我了解(对于每个公司)数据中是否存在任何差距,并为两个不同的系列计算 returns。就像这样:
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
.. ... .. .. .. ..
如果您对如何处理此问题有任何其他建议,请随时分享您的知识:) 我有点缺乏经验,所以我相信您的建议会有所帮助!
提前谢谢你们!
您可以创建一个掩码来判断去年是否存在,然后使用 pct change 更新这些年份:
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()
我正在处理大量的财务信息面板数据,但是这些值有点参差不齐。我正在尝试计算面板数据中每只股票每年之间的 return。然而,由于缺失值,有时公司会有年份差距,使得: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
.. ... .. .. .. ..
我正在寻找的是一段代码,它可以让我了解(对于每个公司)数据中是否存在任何差距,并为两个不同的系列计算 returns。就像这样:
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
.. ... .. .. .. ..
如果您对如何处理此问题有任何其他建议,请随时分享您的知识:) 我有点缺乏经验,所以我相信您的建议会有所帮助!
提前谢谢你们!
您可以创建一个掩码来判断去年是否存在,然后使用 pct change 更新这些年份:
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()