【发布时间】:2017-10-13 15:58:18
【问题描述】:
我正在构建一个推荐系统,这里有一些评分数据。 每行代表一个用户,每列代表一个产品,每个数据点代表用户对产品的评分。
in: np.array(df)
array([[ 0., 5., 5., 0., 0., 1.],
[ 5., 0., 4., 0., 1., 0.],
[ 4., 0., 5., 0., 0., 0.],
[ 5., 0., 5., 0., 0., 0.],
[ 4., 5., 0., 0., 0., 0.],
[ 0., 4., 0., 0., 0., 0.],
[ 0., 0., 0., 4., 4., 0.],
[ 0., 0., 0., 0., 5., 4.],
[ 0., 0., 0., 5., 0., 5.],
[ 0., 0., 0., 0., 5., 0.],
[ 0., 0., 0., 5., 0., 0.],
[ 5., 0., 0., 1., 0., 0.]])
我有一个类似于上面的 pandas 数据框(我将它放入一个 numpy 数组中,以便在 stackoverflow 上查看)。
对于每一行,我想选择 10% 的非零项,并将其设置为 0。但是,我还想将每个修改单元格的行号和列号捕获到字典中。 (如果我将某个单元格设置为 0,我想记录我已将哪个单元格更改为 0)
我目前的解决方案是先将所有零更改为 NaN。然后,使用这个 NaN 数据框,当我将数据点设置为 0 时,我能够识别出我修改了哪些单元格。
in: np.array(df[df.iloc[:] !=0])
out: array([[ nan, 5., 5., nan, nan, 1.],
[ 5., nan, 4., nan, 1., nan],
[ 4., nan, 5., nan, nan, nan],
[ 5., nan, 5., nan, nan, nan],
[ 4., 5., nan, nan, nan, nan],
[ nan, 4., nan, nan, nan, nan],
[ nan, nan, nan, 4., 4., nan],
[ nan, nan, nan, nan, 5., 4.],
[ nan, nan, nan, 5., nan, 5.],
[ nan, nan, nan, nan, 5., nan],
[ nan, nan, nan, 5., nan, nan],
[ 5., nan, nan, 1., nan, nan]])
但是,我不确定如何从每行中随机选择 10% 的非 NaN 数据,以及如何存储我已修改的单元格的行索引和列名。 :
【问题讨论】: