У меня есть 3 DataFrame в Pandas:
UserItem - это DataFrame пользователей и элементов, выбранных пользователями, с 2 столбцами, User и Item.
UserTag - это фрейм данных пользователей и тегов с двумя столбцами: User и Tag.
ItemTag - это DataFrame элементов и тегов с 2 столбцами, Item и Tag.
UserItem_df = pd.DataFrame({'user': ['A', 'B', 'B'] , 'item': ['i', 'j', 'k']})
UserTag_df = pd.DataFrame({'user': ['A', 'B'] , 'tag' : ['T', 'R']})
ItemTag_df = pd.DataFrame({'item': ['i', 'j', 'k', 'k'] , 'tag' : ['T', 'S', 'T', 'R']})
Я хочу вычислить для каждой пары (пользователь, элемент) в UserItem размер пересечения (а также объединения!) Тегов этого пользователя с тегами этого элемента.
Answer_df = pd.DataFrame({'user': ['A', 'B', 'B'] , 'item': ['i', 'j', 'k'], 'intersection': [1, 0, 1], 'union' : [1, 2, 2]})
Какой самый эффективный способ сделать это? Это DataFrames с 30 миллионами строк (UserItem_df
) и около 500 тысяч строк для двух других. Набор продуктов всех возможных пар (пользователь, элемент) составляет около 30 миллиардов - мне не нужны пересечения и объединения для всех возможных пар, только те, которые находятся во фрейме данных UserItem.