Как объединить датафрейм с точкой с запятой в Python? - PullRequest
3 голосов
/ 03 октября 2019

У меня есть два фрейма данных Product, Users Продукт может быть в нескольких категориях, где все категории разделены точкой с запятой. Интерес пользователей будет связан с несколькими категориями, которые также отделены точкой с запятой. Теперь мне нужно найти все идентификаторы контента, где пользователи взаимодействуют.

Я попытался разделить оба столбца данных (Продукт, Пользователи) и попытался найти значение isin(). Я получаю эту ошибку.

users['intrestcategory'].str.split(";", n=1, expand=True)

Пытается установить значение для копии среза из DataFrame ValueError: Неверное количество пропущенных элементов: 0, размещение подразумевает 1

Ниже приведен пример фреймов данных,

1) продукт

Categories      contentId
                1
12;2            2
                3
2               4
3;15            5
15              6
                7
20              8
20;2            9

2) пользователи

userid  intrestcategories
2       12;2
3       3
4       15

3) конечный вывод

userid  contentId
2       4
2       2
2       9
3       5
4       5
4       6

1 Ответ

1 голос
/ 03 октября 2019

Сначала мы используем explode (версия pandas> = 0.25.0), чтобы преобразовать несколько категорий в столбце в несколько строк, а затем merge в категориях и отбрасываемдубликаты:

import pandas as pd
from numpy import nan
dfp = pd.DataFrame({'contentId': {0: nan, 1: 2.0, 2: nan, 3: 4.0, 4: 5.0, 5: 6.0, 6: nan, 7: 8.0, 8: 9.0}, 'Categories': {0: '1', 1: '12;2', 2: '3', 3: '2', 4: '3;15', 5: '15', 6: '7', 7: '20', 8: '20;2'}})
dfu = pd.DataFrame({'intrestcategories': {0: '12;2', 1: '3', 2: '15'}, 'userid': {0: 2, 1: 3, 2: 4}})

dfp.Categories = dfp.Categories.str.split(';')
dfp = dfp.explode('Categories')

dfu.intrestcategories = dfu.intrestcategories.str.split(';')
dfu = dfu.explode('intrestcategories')

dfp.dropna().merge(dfu,left_on='Categories',right_on='intrestcategories')[['userid','contentId']].drop_duplicates().astype(int)

Результат:

    userid  contentId
0        2          2
2        2          4
3        2          9
4        3          5
5        4          5
6        4          6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...