使用 pandas 从一列创建布尔矩阵

Creating boolean matrix from one column with pandas

我一直在寻找答案,但我不知道要寻找什么,所以我会在这里问。我是初学者 python 和 pandas 发烧友。

我有一个数据集,我想从其中的列生成矩阵。如果列中的值及其转置状态相等,则矩阵的值为 1,否则为 0。

输入:

  id x1
   A  1
   B  3
   C  1
   D  5

输出:

  A  B  C  D

A 1  0  1  0

B 0  1  0  0

C 1  0  1  0

D 0  0  0  1

我想对六个不同的列执行此操作,并将生成的矩阵添加到一个矩阵中,其中值的范围是 0-6 而不仅仅是 0-1。

部分原因是目前还没有方便的笛卡尔连接(吹口哨并移开视线),我倾向于下降到 numpy 级别并在需要做类似的事情时使用广播这个。 IOW,因为我们可以做这样的事情

>>> df.x1.values - df.x1.values[:,None]
array([[ 0,  2,  0,  4],
       [-2,  0, -2,  2],
       [ 0,  2,  0,  4],
       [-4, -2, -4,  0]])

我们可以做到

>>> pdf = pd.DataFrame(index=df.id.values, columns=df.id.values, 
                       data=(df.x1.values == df.x1.values[:,None]).astype(int))
>>> pdf
   A  B  C  D
A  1  0  1  0
B  0  1  0  0
C  1  0  1  0
D  0  0  0  1