我有两个数据框架,一个是投资组合权重,每行是一个投资组合,另一个是按日期列出的证券回报率列表,换句话说,每个证券的回报率时间序列,两者都有相同的列,即证券,顺序相同。
我想将证券数据框乘以投资组合数据框的每一行,并根据相乘后的值(即权重 * 日期值)为每个投资组合创建一个新的数据框,然后将新数据框中的每一列相加,并使用该值创建一个投资组合时间序列。
我试着找到解决这个问题的方法,比如在一个循环中用一个乘另一个,但是我没有成功。
这是我测试过的一个例子。
#for loop to create time series for tested portfolios
x = 0
portfolios_time_series = pd.DataFrame()
for x in portfolios_df:
portfolio_underlying_returns = security_returns_df.multiply(portfolios_df.iloc[x])
portfolios_time_series = portfolios_time_series.append(portfolio_underlying_returns.sum(axis=1))
如果投资组合是这样的:
证券是这样的:
然后,应在循环中创建两个新的 Dataframe (如果循环是最佳解决方案),如下所示:
然后,投资组合的最终时间序列 Dataframe 应该是这样的:
1条答案
按热度按时间dl5txlt91#
使用numpy broadcast来避免对矢量化操作使用循环:
输出: