2016-08-05 70 views
1

我想計算這兩家公司的年度業績(作爲市場價值的變化),這兩家公司的數據存儲在下面的數據框中。計算大熊貓的股票收益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年,而不是隻有相應的這家公司。

我將不勝感激任何幫助!

+0

不管你的問題的,在'else'分支,'(df.mktvalue [(DF [ 'fyear'] == 2013)])/(df.mktvalue [(DF [ 'fyear'] == 2013)])'將始終返回1.是你想要的嗎? – IanS

回答

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 
+0

並不完全一樣,因爲我希望三年內只能針對AAPL的百分比變化,以及三年期間只針對GOOGL的百分比變化。所以對於AAPL,我需要0(20/20-1),0.25(25/20-1),0.2(30/25-1)和GOOGL 0(50/50-1),0.1(55/1),0.09(60/55-1) – DaveL

+0

@DaveL,請檢查更新的答案 – MaxU

+0

這正是我正在尋找的,非常感謝你! – DaveL