稀疏表示的熊猫数据框

时间:2018-12-07 16:58:14

标签: python pandas dataframe scikit-learn

我有一个密集的熊猫数据框。 我想从中得到一个稀疏的数据帧,其中原始数据帧的每个值将是结果稀疏数据帧中1的列。

示例:

原始df:

    a b
0   5 3
1   2 6

稀疏df:

(0,3): 1
(0,5): 1
(1,2): 1
(1,6): 1

我不在乎发生碰撞的情况是1还是碰撞次数

然后我将此df传递给sklearn.linear_model.LogisticRegression拟合函数(我不确定此处将接受哪种稀疏矩阵)

什么是合适的方法?

我可以手动创建它(在行中重复),但是数据帧很大,因此我试图找到一种有效的方法。

谢谢

2 个答案:

答案 0 :(得分:0)

基于@Dark评论:

mlb = sklearn.preprocessing.MultiLabelBinarizer(sparse_output = True)
result = mlb.fit_transform(np.array[df])

fit_transform需要一个可迭代项:expalantion here

答案 1 :(得分:0)

比@Dark提出的解决方案快得多的解决方案是使用csr_matrix构造函数,但是在有冗余的情况下可以总结这些,这对我来说是可以的:

nrow = len(df.index)
ncol = len(df.columns)
indices = df.values.flatten()
data = np.full_like(indices, 1)
nelement = len(indices)
indptr = range(0, nelement+ncol, ncol)
result = csr_matrix((data, indices, indptr))