在for循环中优化append()

时间:2020-09-03 14:54:16

标签: python pandas performance loops

我有一个for循环,可以处理超过900万个组合(为此,我使用了itertools库),必须更快地执行下面的代码,循环遍历所有组合都花费了很长时间。感谢任何建议

wb = xw.books('FX VEGA BT.xlsm')
sht = wb.sheets['Sheet1']
#retrieving data from excel
df = pd.DataFrame(sht.range('PY_PNL').value, columns=['10','20','25','40','50','60','70','75','80','90'])

#df has shape of 3115 rows × 10 columns

def sharpe(x):
    s = round(np.average(x)/np.std(x)*np.sqrt(252),2)
    return s

shrps = []
outlist = []

mult = (-1,-2.5,0,1,2.5)

perm = itertools.product(mult,repeat = 10)
for p in perm:
    c = df*p
    c = c.sum(axis='columns')
    outlist.append(p)
    shrps.append(sharpe(c))

1 个答案:

答案 0 :(得分:0)

您可以使用列表推导,这样会更快一些:

shrps = [sharpe((df*p).sum(axis='columns')) for p in perms]

如果您确实需要名为perm的{​​{1}}的副本,则可以使用outlist软件包中的deepcopy

copy

要进一步加快该过程,可以在import copy outlist = copy.deepcopy(perm) 函数中更改某些内容(我不知道它的外观)。

相关问题