时间序列数据框中的横截面权重
Cross-sectional weight in a time-series dataframe
我有一个数据框,它以宽表格形式存储时间序列值:
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 中最优雅的方法是什么?
我有一个数据框,它以宽表格形式存储时间序列值:
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 中最优雅的方法是什么?