Я беру данные с возвратов данных, где каждый столбец измеряет процент возврата на таймфрейме. Далее я рассчитываю совокупный доход следующим образом:
return_cuml = [np.cumprod(return[column]+1 for column in returns]
Однако, это выводит совокупный доход в виде списка, где каждый элемент является серией возвращений. В моем исходном фрейме данных есть такие столбцы, как: Портфолио, Benchmark, 100_0, 50_50, 70_30 и др. c.
Как мне исправить одну строку для l oop или превратить мой новый список в кадр данных с такими же именами столбцов, как и раньше?
Код
import random
import pandas as pd
import numpy as np
random.seed(321)
port = []
bmk = []
eq = []
ff = []
idk = []
for i in range(10):
port.append(random.randrange(-100,100,1)/100)
bmk.append(random.randrange(-100,100,1)/100)
eq.append(random.randrange(-100,100,1)/100)
ff.append(random.randrange(-100,100,1)/100)
idk.append(random.randrange(-100,100,1)/100)
frame = {'Portfolio': port, 'Benchmark':bmk, '100_0':eq, '50_50':ff, '70_30':idk}
df = pd.DataFrame(frame)
df_cuml = [(np.cumprod(df[column]+1)*10000) for column in df]
np.cumprod(df['100_0']+1)*10000
** Ожидаемый результат
port = np.cumprod(df['Portfolio']+1)*10000
bmk = np.cumprod(df['Benchmark']+1)*10000
eq = np.cumprod(df['100_0']+1)*10000
ff = np.cumprod(df['50_50']+1)*10000
idk = np.cumprod(df['70_30']+1)*10000
frame = {'Portfolio': port, 'Benchmark':bmk, '100_0':eq, '50_50':ff, '70_30':idk}
expected_output = pd.DataFrame(frame)
print(expected_output)