Python 从2个数据帧计算加权股票回报
我有一个由7只股票组成的投资组合,它们的信息在2个数据帧中 市值:Python 从2个数据帧计算加权股票回报,python,pandas,Python,Pandas,我有一个由7只股票组成的投资组合,它们的信息在2个数据帧中 市值: AAPL GOOGL AMZN FB IBM MSFT ORCL 2018-06-04 942870.9225 795721.6978 808033.8064 559683.8431 131306.1865 781150.6901 193175.0512 2018-06-05 950145.3268 795208.7988 82311
AAPL GOOGL AMZN FB IBM MSFT ORCL
2018-06-04 942870.9225 795721.6978 808033.8064 559683.8431 131306.1865 781150.6901 193175.0512
2018-06-05 950145.3268 795208.7988 823114.6586 558699.2999 131912.0456 785145.9528 192399.4117
2018-06-06 953438.4692 792862.4102 822823.5225 554066.1556 132839.1936 787450.9121 194930.4458
2018-06-07 950882.5975 783977.2272 819693.8089 544915.6954 133435.8730 775080.9641 194644.6838
2018-06-08 942231.9546 782312.8482 817117.2541 547579.7534 134151.8882 780843.3622 196685.8403
投资组合股票价格:
AAPL FB GOOG AMZN IBM MSFT ORCL
2018-06-04 189.6813 193.28 1139.29 1665.27 136.5008 100.4157 46.5525
2018-06-05 191.1447 192.94 1139.66 1696.35 137.1307 100.9293 46.3656
2018-06-06 191.8072 191.34 1136.88 1695.75 138.0945 101.2256 46.9755
2018-06-07 191.2930 188.18 1123.86 1689.30 138.7148 99.6354 46.9067
我想计算每日加权平均投资组合回报率。权重是股票市值与总市值之和的百分比
例如,加权回报率应为
sum(股票收益率i*股票上限i)/sum(股票上限i)
如何生成一个新的数据框,该数据框包含整个期间的每日收益?不确定我是否正确获取了您的信息,但这是怎么回事:
将熊猫作为pd导入
pd.set_选项('display.max_columns',30)
pd.set_选项('display.width',1000)
pd.设置_选项(“精度”,4)
mc=“”日期AAPL GOOG AMZN FB IBM MSFT ORCL
2018-06-04 942870.9225 795721.6978 808033.8064 559683.8431 131306.1865 781150.6901 193175.0512
2018-06-05 950145.3268 795208.7988 823114.6586 558699.2999 131912.0456 785145.9528 192399.4117
2018-06-06 953438.4692 792862.4102 822823.5225 554066.1556 132839.1936 787450.9121 194930.4458
2018-06-07 950882.5975 783977.2272 819693.8089 544915.6954 133435.8730 775080.9641 194644.6838
2018-06-08 942231.9546 782312.8482 817117.2541 547579.7534 134151.8882 780843.3622 196685.8403
"""
sp=“”日期AAPL FB GOOG AMZN IBM MSFT ORCL
2018-06-04 189.6813 193.28 1139.29 1665.27 136.5008 100.4157 46.5525
2018-06-05 191.1447 192.94 1139.66 1696.35 137.1307 100.9293 46.3656
2018-06-06 191.8072 191.34 1136.88 1695.75 138.0945 101.2256 46.9755
2018-06-07 191.2930 188.18 1123.86 1689.30 138.7148 99.6354 46.9067
"""
marketcap=pd.read\u csv(pd.compat.StringIO(mc),header=0,sep=“\s+”,parse\u dates=True,index\u col=0)
prices=pd.read\u csv(pd.compat.StringIO(sp),header=0,sep=“\s+”,parse\u dates=True,index\u col=0)
portfolioReturns=pd.DataFrame()
def weightedReturn(键):
dailyReturns=价格[key]。价格变化(1)
权重=市值[关键]
portfolioReturns[关键点]=DailReturns*权重
[weightedReturn(键)用于键入价格。列]
打印(portfolioReturns)
收益率:
AAPL FB GOOG AMZN IBM MSFT ORCL
date
2018-06-04 NaN NaN NaN NaN NaN NaN NaN
2018-06-05 7330.4151 -982.8113 258.2549 15362.3158 608.7246 4015.8159 -772.4494
2018-06-06 3304.5802 -4594.7230 -1934.0483 -291.0332 933.6379 2311.7341 2564.1441
2018-06-07 -2549.1422 -8999.3394 -8978.4177 -3117.8093 599.3741 -12176.1071 -285.0753
2018-06-08 NaN NaN NaN NaN NaN NaN NaN
当然,portfolioReturns.mean(axis=1)
将返回投资组合的平均每日回报
或者,作为一行:
print(prices.pct_change()).multiply(marketcap.mean(axis=1)
您可以添加您的预期产出吗?您不应该提供投资组合中每只股票的权重吗?除非,你的投资组合本质上是大科技的ETF。什么是股票回报i
?回报定义为Pt/Pt-1-1。例如,如果3天内的价格分别为100110和120,我可以计算2个回报(110/100-1=10%和120/110-1)。我希望有一个数据框,显示t天的每日加权回报(因此将有t-1行数据)。每日投资组合收益是7只股票的加权平均收益------平均(股票收益率1+股票收益率2+…+股票收益率7)。特定日期的权重是当天的市值,在第一个数据框中给出。