首页 > 解决方案 > 从简单的熊猫数据框创建矩阵

问题描述

我有一个包含两列的简单数据框,并希望将其转换为具有相同列数和行数的矩阵。

我有几个组合作为行,并希望将它们复制到列中,以便在视觉级别(可能是和弦图)上查看关系的强度。

这是我正在使用的数据框示例:

variables         count
a                  13
b                   9
c                   8
d                   6
e                  10
f                  12
g                   9
h                   7
a_b                 7
a_b_h               8

这是我想要的输出,考虑到我有几种组合,而不仅仅是成对的。

         a  b  c  d  e  f  g  h  a_b a_b_h
a       13  7  0  0  0  0  0  0  0    0
b        7  9  0  0  0  0  0  0  0    0
c        0  0  8  0  0  0  0  0  0    0
d        0  0  0  6  0  0  0  0  0    0
e        0  0  0  0 10  0  0  0  0    0
f        0  0  0  0  0 12  0  0  0    0
g        0  0  0  0  0  0  9  0  0    0
h        0  0  0  0  0  0  0  7  0    0
a_b      0  0  0  0  0  0  0  0  7    0
a_b_h    0  0  0  0  0  0  0  0  0    8

依此类推,所有组合。

目的是然后构建一个如下图所示的和弦图 - 它显示了变量之间关系的强度

标签: pythonpython-3.xpandasnumpy

解决方案


使用np.diag

df = pd.DataFrame({"variables": ["a", "b", "c", "d", "e", "f", "g", "h", "a_b", "a_b_h"],
                   "count": [13, 9, 8, 6, 10, 12, 9, 7, 7, 8]})

df2 = pd.DataFrame(np.diag(df["count"]), columns=df["variables"], index=df["variables"])

输出:

variables   a  b  c  d   e   f  g  h  a_b  a_b_h
variables                                       
a          13  0  0  0   0   0  0  0    0      0
b           0  9  0  0   0   0  0  0    0      0
c           0  0  8  0   0   0  0  0    0      0
d           0  0  0  6   0   0  0  0    0      0
e           0  0  0  0  10   0  0  0    0      0
f           0  0  0  0   0  12  0  0    0      0
g           0  0  0  0   0   0  9  0    0      0
h           0  0  0  0   0   0  0  7    0      0
a_b         0  0  0  0   0   0  0  0    7      0
a_b_h       0  0  0  0   0   0  0  0    0      8

推荐阅读