I am trying to do a conditional statement on lots of data to classify certain combinations of moves.
My code works and gets the job done but it is rather slow. This took about a minute to run on about 3000 rows. I am wondering if there is a way to do this same sort of thing but in a more efficient way to make the run time faster?
Any tips are greatly appreciated! Thanks!
df = pd.read_excel(file_path)
production_list = ['FCP01', 'FCP02', 'FCP03', 'FCP04', 'FCP05', 'FCP06', 'FCP07', 'PKG0', 'PKG1', 'PKG10', 'PKG11', 'PKG12', 'PKG13', 'PKG14', 'PKG15', 'PKG16', 'PKG17', 'PKG18', 'PKG19', 'PKG2', 'PKG20', 'PKG21', 'PKG3', 'PKG4', 'PKG5', 'PKG6', 'PKG7', 'PKG8', 'PKG9']
pickbelt_list = ['RBELT A1', 'RBELT A2', 'RBELT A3', 'RBELT A4', 'RBELT A5', 'RBELT A6', 'RBELT A7', 'RBELT A8', 'RBELT B1', 'RBELT B2', 'RBELT B3', 'RBELT B4', 'RBELT B5', 'RBELT B6', 'RBELT B7', 'RBELT B8', 'RBELT C1', 'RBELT C2', 'RBELT C3', 'RBELT C4', 'RBELT C5', 'RBELT C6', 'RBELT C7', 'RBELT C8', 'RBELT D2', 'RBELT D3', 'RBELT D4', 'RBELT D6', 'RBELT D7', 'RBELT D8', 'REPACK', 'T', 'TBELT', 'TBELT A1', 'TBELT A2', 'TBELT B1', 'TBELT B2', 'TBELT C1', 'TBELT C2', 'TBELT C3', 'TBELT D1', 'TBELT D2']
rack_list = ['A','A1','AA','B','B1','BB','C','C1','CC','D','DD','E1','F1','G1','H1','J3','K1','K2','K3','L','M','MW1','MW3','N','NW','SW1','SW2','SW3','WW','NEW_N BANK 1','NEW_N BANK 2','NEW_N BANK 3','NEW_S BANK 1','NEW_S BANK 2','NEW_S BANK 3','WW BANK 1','WW BANK 2','WW BANK 3','WW BANK 4','WW BANK 5']
door_list = ['DR01', 'DR02', 'DR03', 'DR04', 'DR05', 'DR10', 'DR13', 'DR14', 'DR17', 'DR18', 'DR19', 'DR20', 'DR23', 'DR24', 'DR25', 'DR30', 'DR31', 'DR32', 'DR33', 'KD_DR01', 'KD_DR02', 'KD_DR03', 'KD_DR04', 'KD_DR05', 'KD_DR06', 'KD_DR07', 'KD_DR08']
wrapper_list = ['WRO1F', 'WRO2F', 'WRO3F', 'WRO4F', 'WRP1F', 'WRP2F', 'WRP3F', 'WRP4F']
utility_moves = ['FILM','DUMPSTER']
def Move_Type(Start,Finish):
for rack in rack_list:
if Start == rack:
for rack in rack_list:
if Finish == rack:
return "Dig"
elif Finish != rack:
for door in door_list:
if Finish == door:
return "Load"
elif Finish != door:
for belt in pickbelt_list:
if Finish == belt:
return 'Rotate'
elif Finish != belt:
for utility in utility_moves:
if Finish == utility:
return 'Utility'
else: skip
elif 'DR' in Start:
for door in door_list:
if door == Start:
return 'Unload'
else: skip
elif 'WR' in Start:
for wrapper in wrapper_list:
if wrapper == Start:
for door in door_list:
if door == Finish:
return 'Express'
elif door != Finish:
for rack in rack_list:
if rack == Finish:
return 'Storage'
elif rack != Finish:
for belt in pickbelt_list:
if belt == Finish:
return 'Express'
else: skip
elif 'PKG' in Start or 'FCP' in Start:
for wrapper in wrapper_list:
if Finish == wrapper:
return 'Production Transfer'
elif Finish != wrapper:
for belts in pickbelt_list:
if Finish == belts:
return 'Express'
elif Finish != belts:
for racks in rack_list:
if Finish == racks:
return 'Storage'
elif Finish != racks:
for doors in door_list:
if Finish == doors:
return 'Express'
else: skip
df['Move Classification'] = df.apply(lambda x: Move_Type(x['Start'],x['Finish']),axis=1)