在pandas DataFrame中计算股票收益

时间:2016-08-05 09:10:54

标签: python pandas dataframe

我想计算这两家公司的年度业绩(作为市场价值的变化),这两家公司的数据存储在下面的数据框中。

df = pd.DataFrame({'tic'      : ['AAPL', 'AAPL', 'AAPL', 'GOOGL','GOOGL','GOOGL'],
                   'mktvalue' : [20,25,30,50,55,60],
                   'fyear'    : [2014,2015,2016,2014,2015,2016]})

我已经看过类似解决方案的lambda函数,但直到现在我无法使其适应我的数据。我有一个这样的解决方案来计算基于年份的表现:

df['performance'] = df.fyear.apply(lambda x: (df.mktvalue[(df['fyear'] == 2014)]) / 
                    (df.mktvalue[(df['fyear'] == 2013)]) if x == 2014 
                    else (df.mktvalue[(df['fyear'] == 2013)]) /                
                    (df.mktvalue[(df['fyear'] == 2013)])

我的一个主要问题是在执行时调用

(df.mktvalue[(df['fyear'] == 2013)])

我收到了2013年的所有市场价值,而不是该公司的相应市场价值。

我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:0)

是你想要的吗?

In [129]: df['performance'] = df.groupby('tic').mktvalue.pct_change().fillna(0)

In [130]: df
Out[130]:
   fyear  mktvalue    tic  performance
0   2014        20   AAPL     0.000000
1   2015        25   AAPL     0.250000
2   2016        30   AAPL     0.200000
3   2014        50  GOOGL     0.000000
4   2015        55  GOOGL     0.100000
5   2016        60  GOOGL     0.090909