【发布时间】:2018-08-29 02:09:31
【问题描述】:
我有一个 pandas 数据框(交互数据框),其中包含用户、项目、评级等列。
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 秒才能完成。 有没有一种快速的方法来做到这一点? 感谢您的帮助。
【问题讨论】:
标签: python pandas numpy machine-learning recommendation-engine