我采用的是一个收益数据框架,其中每一列衡量一个时间范围内的收益百分比。接下来,我将按如下方式计算累积回报:
return_cuml = [np.cumprod(return[column]+1 for column in returns]
但是,这会将累积回报输出为一个列表,其中每个元素都是一系列回报。我的原始数据框架有很多列,如:公文包、基准、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)
试试^{} :
或者使用concat(related topic)将
series
列表转换为Dataframe
:相关问题 更多 >
编程相关推荐