我有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