Жесткое сопоставление двух информационных кадров без итерации - PullRequest
1 голос
/ 08 октября 2019

У меня есть следующий фрейм данных (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])

Есть ли, например, какой-нибудь питонический способ (понимание списка), который мог бы ускорить этот процесс?

1 Ответ

0 голосов
/ 08 октября 2019

Большое спасибо, в конце концов это было очень просто:

merged = df_main.merge(df_inventory, how='inner', on=['car_brand', 
'car_main_type','car_age_years_group','mileage_group'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...