numpy 将pandas矩阵转换为稀疏矩阵

rm5edbpk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个Pandas相框。

data = {'col_1': ['a', 'b'], 'col_2': ['b', 'c']}
df = pd.DataFrame(data)

字符串
我想把它转换成numpy中数据的稀疏表示,例如。

[[[1, 0], [0, 0]], [[0, 1], [1, 0]], [[0, 0], [0, 1]]]


其中每个2x2矩阵代表我的Pandas图中“a”、“B”和“c”的位置。
我可以通过一些杂乱的操作来达到预期的结果:

boolean_matrix = pd.get_dummies(df, prefix='', prefix_sep='').groupby(level=0, axis=1).sum()

boolean_matrix = boolean_matrix.values.tolist()
boolean_matrix = [[[int(i == j) for j in range(len(boolean_matrix[0]))] for i in row] for row in boolean_matrix]

print(boolean_matrix)


但是我不敢相信这是一个标准的方法来做一个很常见的操作,有没有内置的方法(pandas,polars,numpy,tensorflow)可以做到这一点?

cyvaqqii

cyvaqqii1#

让我们使用numpy广播和unique

out = (df.to_numpy() == np.unique(df)[:,None,None]).astype(int)

字符串
或者,对于特定订单:

out = (df.to_numpy() == np.array(['a', 'b', 'c'])[:,None,None]).astype(int)


输出量:

array([[[1, 0],
        [0, 0]],

       [[0, 1],
        [1, 0]],

       [[0, 0],
        [0, 1]]])

相关问题