2016-11-04 13 views
1

に、私は広い表形式で時系列値を格納するデータフレームがあります。断面体重時系列データフレーム

market_value = pd.DataFrame({'AAPL':[100,200,400], 'IBM':[50,100,200],'MSFT':[50,200,400]}, 
          index = ['2013-12-31', '2014-12-31', '2015-12-31']) 

In [1]: market_value 
Out [1]: 
      AAPL IBM MSFT 
2013-12-31 100  50  50 
2014-12-31 200 100  200 
2015-12-31 400 200  400 

を私は任意で各株式の断面重量を計算したいです時間点。 2013年12月31日に例えば、AAPLの重量は次のとおりです。

100/(100+50+50) = 0.50 

だから結果は次のようになります。

In [2]: weight 
Out [2]: 
      AAPL IBM MSFT 
2013-12-31 0.50 0.25 0.25 
2014-12-31 0.40 0.20 0.40 
2015-12-31 0.40 0.20 0.40 
これをすることによって行われMATLABで

weight = market_value ./ repmat(sum(market_value,2), 1, 3) 

Pythonでこれを行う最もエレガントな方法は何ですか?

答えて

1

あなたが行でdivsumによる除算が必要になります。

print (market_value.sum(axis=1)) 
2013-12-31  200 
2014-12-31  500 
2015-12-31 1000 
dtype: int64 

print (market_value.div(market_value.sum(axis=1), axis=0)) 
      AAPL IBM MSFT 
2013-12-31 0.5 0.25 0.25 
2014-12-31 0.4 0.20 0.40 
2015-12-31 0.4 0.20 0.40 
関連する問題