使用 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
我一直在寻找答案,但我不知道要寻找什么,所以我会在这里问。我是初学者 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