【发布时间】:2020-05-10 00:38:14
【问题描述】:
我正在获取一个回报数据框,其中每列衡量一个时间范围内的回报百分比。接下来我计算累积回报如下:
return_cuml = [np.cumprod(return[column]+1 for column in returns]
但是,这会将累积收益输出为一个列表,其中每个元素都是一系列收益。我的原始数据框有如下列:Portfolio、Benchmark、100_0、50_50、70_30 等。
如何修复我的一行 for 循环或将我的新列表转换为与以前具有相同列名的数据框?
代码
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)
【问题讨论】:
-
你能分享一下预期的输出吗?
-
如果你 print(expected_output) 应该是这样。
标签: python list numpy dataframe for-loop