У меня есть фрейм данных с разными сигналами и возвратами. Я хочу сделать следующее:
- Подмножество a specifici c signal
- Рассчитать годовой доход
- Сохранить результат в фрейм данных
Мой фрейм данных выглядит так: введите здесь описание изображения
Мой код выглядит так:
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
Но мой вывод все еще неверен: введите описание изображения здесь
Я попытался преобразовать свой вывод в фрейм данных, сбросить индекс и теперь как-то транспонировать мой столбец сигнала как строку / заголовок.