因此,我有一个投资组合组成(投资组合中包含一些股票),并且在特定日期我需要重新平衡-这意味着投资组合的组成发生了变化。 数据框包含列['名称'; 'Date_rebalancing'; '重量']
然后我有了另一个大数据框,其中包含所有可能股票的每日收益。 我需要每天提取投资组合收益。
因此,当重新平衡日期发生时,Portfolio_return_next_day是sumproduct(weights; return_only_for_those_companies)。计算每日收益。
stock_return=prices.apply(lambda x: x/x.shift(1)-1)
我希望获得每日投资组合回报列表
答案 0 :(得分:0)
在大数据框架上,您需要进行过滤以使其与投资组合匹配。因此,请使用.isin()
df_select = df_big.loc[df_big['name'].isin.[df_port['name'],:]
df_select现在是一个仅包含您的股票每日价值的数据框。为了获得每日收益,有一个内置函数pct_return()。 (#默认为一个周期)
假设您的收盘价栏称为“收盘价”。然后根据每日收益创建一个新列。
df_select['return'] = df['Close'].pct_return()
这将为您提供带有库存和日收益率百分比的数据框。
答案 1 :(得分:0)
df_unique_dates
是应进行重新平衡的日期。我已经完成了stock_return
中每只股票的回报,但是在每个重新平衡日,我只需要选择出现在投资组合list_stocks
中的那些股票
for i in range(len(df_unique_dates)):
list_stocks=dataset.Name.loc[df_unique_dates[i]]
for j in range(len(stock_return)):
if stock_return.index[j]>df_unique_dates[i] and stock_return.index[j]<=df_unique_dates[i+1]:
stock_return['portfolio']=0.1*stock_return[list_stocks].sum(axis=1)
stock_return