加快/改善循环的构建/性能

时间:2018-08-23 09:42:01

标签: python pandas performance loops

我是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))

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您真的希望它更快,那么请先在while循环中实现它。

第二个要使用的length变量,使用Mypy library预先定义类型,在这种情况下,您需要安装Python 3.5+版本。

如果每个迭代都是唯一的,则可以使用threading library使用多线程。 Get eg in this git repo