我有一个密集的熊猫数据框。 我想从中得到一个稀疏的数据帧,其中原始数据帧的每个值将是结果稀疏数据帧中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拟合函数(我不确定此处将接受哪种稀疏矩阵)
什么是合适的方法?
我可以手动创建它(在行中重复),但是数据帧很大,因此我试图找到一种有效的方法。
谢谢
答案 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))