Объединить два кадра данных при условии, что значение в первом кадре данных является подстрокой значений в другом кадре данных - PullRequest
0 голосов
/ 26 сентября 2019

Допустим, у меня есть фрейм данных retailer_info, например:

    price   product_name    url
0   5005    Intel Pentium Gold G5400 3.70 GHz Processor https://www.theitdepot.com/details-Intel+Penti...
1   7150    Intel Core i3-9100F 3.60 GHz Processor  https://www.theitdepot.com/details-Intel+Core+...
2   8210    AMD Ryzen 3 2200G with Radeon Vega 8 Graphics   https://www.theitdepot.com/details-AMD+Ryzen+3...
3   8415    AMD Ryzen 3 3200G with Radeon Vega 8 Graphics   https://www.theitdepot.com/details-AMD+Ryzen+3...
4   10330   AMD Ryzen 5 1600 3.2 GHz Processor  https://www.theitdepot.com/details-AMD+Ryzen+5...

У меня есть еще один фрейм данных, cpu_info, например:

    Type    Part Number Brand   Model   Rank
92  CPU YD1600BBAEBOX   AMD Ryzen 5 1600    93
96  CPU YD250XBBM4KAF   AMD Ryzen 5 2500X   97
108 CPU YD3200C5FHBOX   AMD Ryzen 3 3200G   109
129 CPU YD150XBBAEBOX   AMD Ryzen 5 1500X   130
138 CPU YD2400C5FBBOX   AMD Ryzen 5 2400G   139
139 CPU YD2200C5FBBOX   AMD Ryzen 3 2200G   140
153 CPU YD130XBBAEBOX   AMD Ryzen 3 1300X   154

Теперь для каждого значения всерия cpu_info['Model'], мне нужно проверить, является ли она подстрокой для какого-либо значения в серии retailer_info['product_name'], и если это так, я хочу объединить столбец url в df retailer_info с фреймом данных cpu_info.

Ожидаемый результат:

    Type    Part Number Brand   Model   Rank    url
92  CPU YD1600BBAEBOX   AMD Ryzen 5 1600    93  https://www.theitdepot.com/details-AMD+Ryzen+5...
96  CPU YD250XBBM4KAF   AMD Ryzen 5 2500X   97  NaN
108 CPU YD3200C5FHBOX   AMD Ryzen 3 3200G   109 https://www.theitdepot.com/details-AMD+Ryzen+3...
129 CPU YD150XBBAEBOX   AMD Ryzen 5 1500X   130 NaN
138 CPU YD2400C5FBBOX   AMD Ryzen 5 2400G   139 NaN
139 CPU YD2200C5FBBOX   AMD Ryzen 3 2200G   140 https://www.theitdepot.com/details-AMD+Ryzen+3...
153 CPU YD130XBBAEBOX   AMD Ryzen 3 1300X   154 NaN

Я понял, new_df = pd.merge(cpu, it['product_name', 'url'], on='', how='left') работает, только если вы хотите объединить только на основе значений столбцов.Я не уверен, как достичь желаемого результата.Буду очень признателен за любую помощь.Thanls.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Можно добавить более одного условия:

dicc = pd.Series(retailer_info["url"].values,index=retailer_info["product_name"]).to_dict()

cpu_info["url"] = ""
for index, row in cpu_info.iterrows():
    for key in dicc:
        if row["Brand"] in key and row["Model"] in key:
            cpu_info.at[index, "url"] = dicc[key]
            break
0 голосов
/ 26 сентября 2019

Попробуй это.Должно работать

def find_url(model_name):
    try:
        return retailer_info[retailer_info['product_name'].str.contains(model_name)]['address'].values[0]
    except:
        return None

cpu_info['url'] = cpu_info['Model'].apply(model_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...