可以使用多线程优化索引迭代代码性能吗?

时间:2017-03-01 08:00:23

标签: python multithreading performance pandas

我有2个数据帧。第一个(900行)包含已应用于交易的更正。第二个数据框(140 000行)包含具有更正值的交易列表。我想要做的就是把旧的价值归还。

要将更正的交易与更正相关联,我必须比较多个属性。在校正数据帧(900行)中,我有每个校正属性的旧值和新值。但是每个校正都可以在不同的属性上进行校正,因此我会检查每个可能的校正属性(在校正数据帧中),以将新值与旧值进行比较,并检查此属性是否已更正。如果是的话我把旧的价值归还了。我确切地说,修正可以适用于在用于识别的字段中共享相同数据的多个交易。

为了完成,我在交易数据框(140 000行)上创建了一个新列,我在其中放置了一个布尔值,当交易未经修正时为true,否则为false。

我现在的代码非常粗略,我想稍微分解一下,但迭代过程阻止了我。它正在运行但它必须通过900 * 140 000线。我在带有12Gb RAM的四核VM上启动它,它在大约1小时20分钟内通过它。

如何提高效果?在这种情况下可以使用多线程吗? 这是我的代码的缩写版本,想象一下if语句的数量是10倍。

def CreationUniqueid(dataframe,Correction):

#creating new column to mark the rows we un corrected
dataframe['Modified']=0
#getting the link between the corrections and deals
b=0
for index in Correction.index:
    b+=1 #just values to see progression of the program
    c=0
    for index1 in dataframe.index:
        c+=1
        a=0

        print('Handling correction '+str(b)+' and deal '+str(c)) # printing progress
        if (Correction.get_value(index,'BO Branch Code')==dataframe.get_value(index1,'Wings Branch') and Correction.get_value(index,'Profit Center')==dataframe.get_value(index1,'Profit Center'))
            print('level 1 success')
            if ((Correction.get_value(index,'BO Trade Id')==dataframe.get_value(index1,'Trade Id') and Correction.get_value(index,'BO Trade Id')!='#') or
                    (Correction.get_value(index,'Emetteur Trade Id')==dataframe.get_value(index1,'Emetteur Trade Id')=='#' and Correction.get_value(index,'BO Trade Id')==dataframe.get_value(index1,'Trade Id'))):
                print('identification success')
                # putting the dataframe to the old state, we need the data in the bad shape to make the computer learn what is a bad trade and what is normal
                if Correction.get_value(index,'Risk Category')!=Correction.get_value(index,'Risk Categgory _M') and Correction.get_value(index,'Risk Category _M')!='':
                    dataframe.set_value(index1,'Risk Category',Correction.get_value(index,'Risk Category'))
                    a=1
                    print('Corr 1 ')
                if Correction.get_value(index,'CEC Ricos')!=Correction.get_value(index,'CEC Ricos _M') and Correction.get_value(index,'CEC Ricos _M')!='':
                    dataframe.set_value(index1,'CEC Ricos',Correction.get_value(index,'CEC Ricos'))
                    a=1
                    print('Corr 2')
                if Correction.get_value(index,'Product Line')!= Correction.get_value(index,'Product Line _M') and Correction.get_value(index,'Product Line _M')!='':
                    dataframe.set_value(index1,'Product Line Code Ricos',Correction.get_value(index,'Product Line'))
                    a=1
                    print ('corr 3')


    return dataframe

0 个答案:

没有答案