2016-08-05 28 views
1

以下のデータフレームにデータが格納されているこれら2社の年次業績を(市場価値の変化として)計算したいと思います。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]}) 

私はラムダ関数と同様の解決法を見てきましたが、これまではデータに適応できませんでした。私の主要な問題の

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

、 == 2013)]) 'は常に1を返します。それはあなたが望むものですか? – IanS

答えて

0

それはあなたが望むものですか? `else`ブランチ、`(df.mktvalue [()== 2013] 'fyear' [DF])/(df.mktvalue [(DF [ 'fyear']で関係なく、あなたの問題の

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の3年間での割合の変更と、GOOGLの3年間の割合の変更のみを希望します。 AAPLの場合、私は0(20/20-1)、0.25(25/20-1)、0.2(30/25-1)、GOOGL 0(50/50-1)、0.1 1)、0.09(60/55-1) – DaveL

+0

@DaveL、更新された回答を確認してください – MaxU

+0

これはまさに私が探していたものです、ありがとうございます! – DaveL

関連する問題