我是Python的新手。我编写了一个脚本,与我的其余代码相比,经历特定循环所花费的时间让我感到惊讶。
有人可以告诉我在我编写的代码中什么效率低下,也许如何提高速度吗?
这里是有问题的循环:(BT_Histos和Histos_Last_Rebal是数据帧,日期在浮点数的索引和列中。Portfolio和Portfolio_Last_Rebal是与我在循环中填充的前两个索引相同的数据帧。权重只是一个列表)
Udl_Perf=BT_Histos/Histos_Last_Rebal-1
for i in range(1,len(BT_Histos.index)):
"""tricky because isin doesn't work with timestamp"""
test_date=pd.Series(Portfolio.index[i-1])
if test_date.isin(Rebalancing_Dates)[0]:
Portfolio_Last_Rebal.loc[Portfolio_Last_Rebal.index[i],'PortSeries']=Portfolio.loc[Portfolio.index[i-1],'PortSeries']
else:
Portfolio_Last_Rebal.loc[Portfolio_Last_Rebal.index[i],'PortSeries']=Portfolio_Last_Rebal.loc[Portfolio_Last_Rebal.index[i-1],'PortSeries']
Portfolio.loc[Portfolio.index[i],'PortSeries']=Portfolio_Last_Rebal.loc[Portfolio_Last_Rebal.index[i],'PortSeries']*(1+sum(Udl_Perf.iloc[i]*weights))
谢谢!
答案 0 :(得分:0)
如果您真的希望它更快,那么请先在while循环中实现它。
第二个要使用的length变量,使用Mypy library预先定义类型,在这种情况下,您需要安装Python 3.5+版本。
如果每个迭代都是唯一的,则可以使用threading library使用多线程。 Get eg in this git repo