python - 将 Pandas DataFrame 转换为稀疏矩阵

标签 python python-3.x pandas dataframe recommendation-engine

这是我的代码:

data=pd.get_dummies(data['movie_id']).groupby(data['user_id']).apply(max)

df=pd.DataFrame(data)

replace=df.replace(0,np.NaN)

t=replace.fillna(-1)

sparse=sp.csr_matrix(t.values)

我的数据由两列组成,即 movie_id 和 user_id。

 user_id      movie_id

   5             1000 

   6             1007 

我想将数据转换为稀疏矩阵。我首先创建了一个交互矩阵,其中行表示 user_id,列表示 movie_id,其中正交互为 +1,负交互为 -1。然后我使用 scipy 将其转换为稀疏矩阵。我的结果如下所示:

(0,0)-1

(0,1) -1

(0,2) 1

但我真正想要的是:

(1000,0)-1

(1000,1) 1

(1007,0)-1

如有任何帮助,我们将不胜感激。

最佳答案

如果您同时具有行索引和列索引(在您的情况下分别为 movie_iduser_id),建议使用 COO 格式进行创建。

您可以将其转换为稀疏格式,如下所示:

import scipy
sparse_mat = scipy.sparse.coo_matrix((t.values, (df.movie_id, df.user_id)))

重要的是,请注意构造函数如何通过将电影 ID 和用户 ID 作为数据参数传递来给出稀疏矩阵的隐式形状。
此外,您可以将此矩阵转换为您想要的任何其他稀疏格式,例如 CSR。

关于python - 将 Pandas DataFrame 转换为稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51240096/

相关文章:

Python - 使用许多参数调用 popen

python - 如何使用 Python、Requests 和 Xpath 抓取网站?

python - Pygame 没有正确处理键盘或鼠标事件

python - 为什么带有 pd.isnull 的 pd.DataFrame 失败?

python - 如何更改 html 输出的数字数据格式

python - 如何复制 Pandas 数据帧以匹配其他数据帧长度?

python - 在 Redshift 表中为 SMALLINT 列插入 NULL 值时出现 "Error: invalid input syntax for integer:"?

python - 如何使用 Chocolatey 将 Python3 安装到自定义路径?

python - pytest-4.x.x : How to report SKIPPED tests like XFAILED?

pandas - 在直方图的相对 bin 上叠加箱线图