У меня есть следующий фрейм данных (df_inventory) уникальных автомобилей, который имеет около 3000 строк:
stock_id car_brand car_model age_group mileage_group
AS12354 Mazda CX-7 6-10 50-100k
DX22234 Toyota Verso 11> 150k>
KL32423 Volkswagen Touran 11> 150k>
SU12121 Renault Twingo 6-10 50-100k
... ... ... ... ...
, а затем у меня есть следующий фрейм данных (df_main) из (уникальных) автомобилей, который имеет около 100000 строк:
clientID car_brand car_model age_group mileage_group
23132 Volkswagen Golf 6-10 50-100k
24234 Renault Twingo 11> 150k>
19055 Volkswagen Polo 11> 150k>
23245 Renault Clio 1-2 0-50k
... ... ... ... ...
В конце я хотел бы получить кадр данных с двумя столбцами. Один из них будет clientID, а второй - Stock_id , ЕСЛИ жестко соответствует всем остальным столбцам (car_brand, car_model, age_group, micycle_group).
Этого можно достичь, используя два цикла for, повторяя каждую комбинацию между stock_id и clientID. Но это приводит к 3000 * 100000 итераций и занимает так много времени:
clientID=[]
stock_id=[]
for i in range(df_main.shape[0]):
for j in range(df_inventory.shape[0]):
if (df_main.iloc[i,1]==df_inventory.iloc[j,1]
and df_main.iloc[i,2]==df_inventory.iloc[j,2]
and df_main.iloc[i,3]==df_inventory.iloc[j,3]
and df_main.iloc[i,4]==df_inventory.iloc[j,4] ):
clientID.append(df_main.iloc[i,0])
stock_id.append(df_inventory.iloc[j,0])
Есть ли, например, какой-нибудь питонический способ (понимание списка), который мог бы ускорить этот процесс?