У меня есть пандасный фрейм данных (фрейм данных взаимодействий) со столбцами как Пользователь, Элемент, Рейтинг.
Ratings ItemID UserID
1 1172952 A74
1 1178735 176
4 341785 70C
3 136771 67E
2 1178883 383
Допустим, у меня есть еще два кадра данных с 200 пользователями и 1000 ietms соответственно.
Проблема в том, что во фрейме взаимодействий мне нужны рейтинги для каждого пользователя и каждой комбинации элементов. Оценка 0 для комбинации пользователь / элемент, если для этого пользователя и элемента нет взаимодействия в кадре данных взаимодействий.
Я пытался использовать цикл вроде этого:
item_ids = np.repeat(item_data.id.values, len(user_data.id.values))
user_ids = np.tile(user_data.id.values, len(item_data.id.values))
ratings = np.empty([len(item_ids)])
for i in range(len(ratings)):
inter = interactions.loc[(interactions['UserID'] == user_ids[i]) & (interactions["ItemID"] == item_ids[i]), "Ratings"]
if not inter.empty:
ratings[i] = inter.values[0]
else:
ratings[i] = 0
interactions = np.stack((ratings, item_ids, user_ids), axis=-1)
Но для массива рейтингов, состоящего из 30 000 строк, требуется 40 секунд.
Есть ли быстрый способ сделать это?
Спасибо за помощь.