2024-03-28 19:32:54 发布
网友
我正在做一个推荐系统,我想有一个评分矩阵(用户/项目)。我的问题是数据集中只有9066个唯一的项目,但它们的ID范围是1到165201。所以我需要一种方法将ID映射到1到9066,而不是1到165201。我该怎么做?你知道吗
我将遍历并找到列表中id最小的项,将其设置为1,然后找到下一个最小的项,将其设置为2,依此类推。你知道吗
编辑:你说得对。那要花很长时间。我只需要通过设置其中一个为1,下一个为2,依此类推。不管身份证的顺序是什么(我猜)。添加新项目时,只需将其设置为9067,以此类推。你知道吗
考虑数据帧df
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获取唯一值并构建映射字典
unique
u = df.Item.unique() m = dict(zip(u, range(len(u))))
然后使用map生成重新配置的列
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完成同样的事情
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
我将遍历并找到列表中id最小的项,将其设置为1,然后找到下一个最小的项,将其设置为2,依此类推。你知道吗
编辑:你说得对。那要花很长时间。我只需要通过设置其中一个为1,下一个为2,依此类推。不管身份证的顺序是什么(我猜)。添加新项目时,只需将其设置为9067,以此类推。你知道吗
考虑数据帧
df
使用
unique
获取唯一值并构建映射字典然后使用
map
生成重新配置的列或者我们可以用
pd.factorize
完成同样的事情相关问题 更多 >
编程相关推荐