我正在制作一个推荐系统,我想要一个评分矩阵(用户/项目)。
我的问题是数据集中只有9066个唯一项目,但它们的ID范围从1到165201.
因此,我需要一种方法将ID映射到1到9066的范围内,而不是1到165201.
我怎么做?Normalize IDs列
2
A
回答
4
考虑数据框df
np.random.seed([3,1415])
df = pd.DataFrame(dict(
User=np.random.randint(10, size=20),
Item=np.random.randint(100, size=20)
))
print(df)
Item User
0 27 0
1 77 2
2 54 7
3 39 3
4 23 8
5 84 7
6 37 0
7 99 6
8 87 8
9 37 6
10 63 0
11 25 2
12 11 0
13 71 4
14 44 9
15 70 7
16 4 3
17 71 2
18 63 4
19 86 3
使用unique
获得独特的价值观,并建立一个映射字典
u = df.Item.unique()
m = dict(zip(u, range(len(u))))
然后使用map
产生重新配置柱
df.assign(Item=df.Item.map(m))
Item User
0 0 0
1 1 2
2 2 7
3 3 3
4 4 8
5 5 7
6 6 0
7 7 6
8 8 8
9 6 6
10 9 0
11 10 2
12 11 0
13 12 4
14 13 9
15 14 7
16 15 3
17 12 2
18 9 4
19 16 3
或者我们可以与pd.factorize
df.assign(Item=pd.factorize(df.Item)[0])
Item User
0 0 0
1 1 2
2 2 7
3 3 3
4 4 8
5 5 7
6 6 0
7 7 6
8 8 8
9 6 6
10 9 0
11 10 2
12 11 0
13 12 4
14 13 9
15 14 7
16 15 3
17 12 2
18 9 4
19 16 3
0
我会经过并找到列表中具有最小id的项目,将其设置为1,然后找到下一个最小的项目,将其设置为2,依此类推。
编辑:你是对的。这将会花费太长时间。我只需要将其中一个设置为1,下一个设置为2,依此类推。这不重要的是什么顺序的ID(我猜测)。添加新项目时,只需将其设置为9067,依此类推。
+0
这将花费太多时间。此外,无论何时将新项目添加到数据集,都需要再次运行整个过程。 –
相关问题
- 1. Vector3.normalize();
- 2. Normalize MySQL fulltext score
- 3. Normalize to 3NF
- 4. boost :: filesystem normalize filename
- 5. Naudio声音normalize
- 6. Regex.Replace todeidentify/normalize columnar text
- 7. 创建列与IDS
- 8. Microsoft.DirectX.Vector3.Normalize()不一致
- 9. Eigen :: vector :: normalize精度
- 10. normalize-space(。)和normalize-space(text())之间的区别是什么?
- 11. PHP取代IDS在阵列
- 12. 转换列表到IDS
- 13. ffmpeg-normalize pip安装失败
- 14. Ruby on Rails - Normalize-rails gem
- 15. 查找阵列从逗号明智IDS在MySQL PHP分离IDS
- 16. HTML DOMs,ids vs no ids?
- 17. 与IDS
- 18. 与IDS
- 19. 让IDS
- 20. 让IDS
- 21. 列出页面中的Ids内循环?
- 22. 序列化ids当保存emberjs模型
- 23. MySQL的IDS通过适当的系列
- 24. mysql的where列= ID VS其中(IDS)
- 25. Normalize逗号分隔的外键
- 26. 使用python Normalize人脸标志数据
- 27. camelCase to css-case(attrs。$ normalize的反转)
- 28. 无法从java执行“normalize-audio out/*。wav”
- 29. Numpy normalize multi dim(> = 3)数组
- 30. Opengl - 为什么normalize()不是幂等的?
已完成同样的事情无法应答ATM。看看pandas.factorize – piRSquared
@piRSquared我无法使用它。我的数据集位于熊猫数据框中,无法将itemID列转换为范围从1到(唯一项目数)。 –