我有以下具有约3000行的独特汽车的数据框(df_inventory):
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,mileage_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])
例如,是否有任何Python方式(列表理解)可以使此过程更快?
答案 0 :(得分:0)
非常感谢,最终这非常简单:
merged = df_main.merge(df_inventory, how='inner', on=['car_brand',
'car_main_type','car_age_years_group','mileage_group'])