【发布时间】:2020-12-22 20:16:51
【问题描述】:
我有一个处理超过 900 万个组合的 for 循环(为此,我使用了 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))
【问题讨论】:
-
perform...better? - 更好的方法?df是什么? - 请阅读minimal reproducible example、amd How to Ask 以及该页面上的其他链接。 -
感谢您的建议,二战。做了一些改动,觉得更清楚了
-
我不知道您从哪里得到
list.append是您需要优化的想法,但事实并非如此。它占用的运行时间可以忽略不计。 -
再说一次,如果没有最小数据示例 (
df),我们该如何提供帮助?您的 mre 不应包含对我们无法访问或某些非现场资源的数据的引用。我们应该能够将您的问题复制并粘贴到我们的编辑器中。 - How to make good reproducible pandas examples -
对于原始追加速度来说,双端队列比列表快(参见here)
标签: python pandas performance loops