У меня есть столбец в фрейме данных со столбцом url_product, который содержит список словарей, как показано ниже (показаны первые 4 строки в качестве примера). Каждый словарь содержит URL-адрес и продукт, связанный с этим URL-адресом.
df.url_product[0]
[{'url': 'https://www.abcstore.com/product/11-abc-gift-card/',
'product': 'giftcard, abcstore'},
{'url': 'https://www.abcstore.com/product/10-skin-lotion/',
'product': 'lotion'},
{'url': 'https://www.abcstore.com/product/10414-moisturising-cream',
'product': 'cream'},
{'url': 'https://www.abcstore.com/blog/best-skincare-lotions/',
'product': 'lotion'},
{'url': 'https://www.abcstore.com/article/140-best-anti-aging-serum',
'product': 'serum'}]
df.url_product[1]
[{'url': 'https://www.abcstore.com/product/7-night-cream',
'product': 'nightcream'},
{'url': 'http://www.abcstore.com/product/149-smoothing-serum/',
'product': 'serum'},
{'url': 'https://www.abcstore.com/blog/rapid-reveal-face-peel',
'product': 'facepeel'}]
df.url_product[2]
[{'url': 'https://www.abcstore.com/product/25-night-infusion-cream',
'product': 'infusioncream'},
{'url': 'https://www.abcstore.com/product/144-bio-cellulose-mask',
'product': 'cellulosemask, mask'},
{'url': 'https://www.abcstore.com/',
'product': 'bestseller, homepage'},
{'url': 'https://www.abcstore.com/blog/essential-skincare-products/',
'product': 'essential, blog'}]
df.url_product[3]
[{'url': 'https://www.abcstore.com/blog/top-skincare-products-2020',
'product': 'skincare, 2020'},
{'url': 'http://www.abcstore.com/article/smoothing-serum/',
'product': 'serum'}]
Для каждой из этих строк я хочу сделать следующее:
- Отфильтровать только словари, в которых URL-адрес содержит '/ product /', и проанализировать число, следующее за 'product /' (будет называть это product_id как простую ссылку). ожидаемый product_id словаря ниже = 11
{'url': 'https://www.abcstore.com/product/11-abc-gift-card/',
'product': 'giftcard, abcstore'}
- Для каждого словаря, в котором URL содержит «/ product /», также подсчитайте количество «продуктов». В примере ниже это количество будет 2 (подарочная карта, abcstore).
{'url': 'https://www.abcstore.com/product/11-abc-gift-card/',
'product': 'giftcard, abcstore'}
- Для каждой строки верните product_id с наибольшим количеством и создайте новый столбец ('top_product_id') в кадре данных, чтобы показать это. Если ни один product_id не имеет наибольшего количества, оставьте поле пустым
Ожидаемый результат для первых 3-х трех строк после шагов выше
df.top_product_id
[0] '11'
[1] (blank)
[2] '114'
[3] (blank)
несколько пунктов для объяснения ожидаемого результата
Строка [0] - ожидайте 11, поскольку product_id 11 имеет счетчик 2 (подарочная карта, abcstore), а product_id 10 и 10414 имеют только по 1 каждому. URL-адреса блога и статьи будут пропущены, так как они не содержат '/ product /' в URL-адресе Строка [1] - ожидайте, что результат будет пустым, поскольку два URL-адреса продукта привязаны к 1 продукту каждый, и поскольку нет единого URL-адреса с наибольшим количеством, строка будет пустой. Строка [2] - ожидайте 114, так как product_id 114 имеет наибольшее количество 2 (целлюлозная маска, маска) Строка [3] - ожидайте, что результат будет пустым, так как нет URL-адресов продуктов.
Как мне создать новый столбец ('top_product_id') в фрейме данных с ожидаемым результатом?