首页 > 解决方案 > 如何将 for 循环的结果存储到给定特定列/行的数据帧?

问题描述

我有一个具有不同信号和返回的数据框。我想做以下事情:

  1. 子集特定信号
  2. 计算年化收益率
  3. 将结果存储到数据框

我的数据框如下所示: 在此处输入图像描述

我的代码如下所示:

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

一切正常,除了最后一部分,我想保存我的结果。我希望我的数据框看起来像这样: 在此处输入图像描述

信号作为列,年份作为行

编辑: 使用以下代码有效:

df = portbase.groupby(['signalname','year'])['return'].apply(lambda x: (np.prod(1+x/100)-1) * 100).reset_index().T

但我的输出仍然不正确: 在此处输入图像描述

我试图将我的输出转换为数据帧,重置索引,现在以某种方式将我的信号列转换为行/标题。

标签: pythonpandas

解决方案


试试这个代码:

df = portbase.groupby(['signalname','year'])['return'].apply(lambda x: (np.prod(1+x/100)-1) * 100).unstack().T

推荐阅读