Python 将帧转换为Scipy稀疏csc_矩阵

Python 将帧转换为Scipy稀疏csc_矩阵,python,pandas,numpy,scipy,Python,Pandas,Numpy,Scipy,我想将pandassparsaframe转换为scipy.sparse.csc_矩阵。但我不想先把它转换回稠密矩阵 现在我有一些类似下面的东西 df = pd.get_dummies(df, sparse=True) 基本上,我需要的是从df进一步获得scipy.sparse.csc_矩阵。有什么办法吗?我参加了各种稀疏熊猫来回答稀疏问题 有一种方法可以将多索引稀疏序列转换为coo矩阵: 但是看到了吗 对于稀疏的数据帧 及 最近, 一旦有了coo矩阵,就可以轻松地将其转换为csr或csc

我想将pandas
sparsaframe
转换为
scipy.sparse.csc_矩阵
。但我不想先把它转换回稠密矩阵

现在我有一些类似下面的东西

df = pd.get_dummies(df, sparse=True)

基本上,我需要的是从
df
进一步获得
scipy.sparse.csc_矩阵。有什么办法吗?

我参加了各种稀疏熊猫来回答稀疏问题

有一种方法可以将多索引稀疏序列转换为coo矩阵:

但是看到了吗 对于稀疏的数据帧

最近,

一旦有了
coo
矩阵,就可以轻松地将其转换为
csr
csc


为了避免混淆,我建议创建一个示例数据帧,先转换为稠密数据帧,然后再转换为稀疏数据帧。我们有一些具体的东西要测试。我曾经推荐Pandas方法,但没有意识到多索引与DataFrame不同。

多亏了@hpaulj的回复。我最终使用了来自的模板

下面是修改后的实现

def sparseDfToCsc(df):
    columns = df.columns
    dat, rows = map(list,zip(*[(df[col].sp_values-df[col].fill_value, df[col].sp_index.to_int_index().indices) for col in columns]))
    cols = [np.ones_like(a)*i for (i,a) in enumerate(dat)]
    datF, rowsF, colsF = np.concatenate(dat), np.concatenate(rows), np.concatenate(cols)
    arr = sparse.coo_matrix((datF, (rowsF, colsF)), df.shape, dtype=np.float64)
    return arr.tocsc()

df = pd.get_dummies(df, sparse=True)
cscMatrix = sparseDfToCsc(df)

感谢@hpaulj的回复。如果我理解正确的话,最好的方法应该是。对吗?