【发布时间】:2020-06-21 16:49:00
【问题描述】:
我有一个具有不同信号和返回的数据框。我想做以下事情:
- 子集特定信号
- 计算年化收益率
- 将结果存储到数据框
我的数据框如下所示: enter image description here
我的代码如下所示:
years = range(1990,2019,1)
returns = pd.DataFrame(columns=signals)
for i in signals:
signal_i = portbase[portbase['signalname'] == i] #Select single signal from dataframe
for j in years:
signal_i_j = signal_i[signal_i['year'] == j] #Subset single year from signal
return_j = (((signal_i_j['return']/100)+1).prod() -1) * 100 #Calculate annualized return for signal i in year j
returns.loc[j,i] #Add result to dataframe in column i and year j
除了最后一部分,我想保存我的结果,一切都正常。 我希望我的数据框看起来像这样: enter image description here
信号作为列,年份作为行
编辑: 使用以下代码有效:
df = portbase.groupby(['signalname','year'])['return'].apply(lambda x: (np.prod(1+x/100)-1) * 100).reset_index().T
但我的输出仍然不正确: enter image description here
我尝试将我的输出转换为数据帧,重置索引,现在以某种方式将我的信号列转换为行/标题。
【问题讨论】: