计数和排序坐标矩阵

2024-04-29 13:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫共生矩阵。如何获得所有组合的共现值,按降序排序而不循环? (我没有将值写在对角线的另一侧,但它们在那里,并保留镜像值)

输入:

  A  B  C  D  E  F
A 0  1  0  1  2  0
B    0  3  1  1  1
C       0  1  8  9
D          0  2  6
E             0  9
F                0

输出:

CF  9
EF  9
CE  8
DF  6
BC  3
AE  2
DE  2
AB  1
AD  1
BD  1
BE  1
BF  1
CD  1
AC  0
AF  0

Tags: df镜像排序de矩阵cfcebc
2条回答

您可以使用来自itertoolscombinations循环行和列,并添加到列表中。你知道吗

from itertools import combinations
explode_list = []
_ = [explode_list.append([r + c, df.loc[r][c]]) for r, c in combinations(df.columns, 2)]

输出

[['AB', 1],
 ['AC', 0],
 ...
]
i, j = np.triu_indices(len(df), 1)

pd.Series(
    df.values[i, j], df.index[i] + df.index[j]
).sort_values(ascending=False)

EF    9
CF    9
CE    8
DF    6
BC    3
DE    2
AE    2
CD    1
BF    1
BE    1
BD    1
AD    1
AB    1
AF    0
AC    0
dtype: object

设置

txt = """\
  A  B  C  D  E  F
A 0  1  0  1  2  0
B    0  3  1  1  1
C       0  1  8  9
D          0  2  6
E             0  9
F                0"""

df = pd.read_fwf(pd.io.common.StringIO(txt), index_col=0).fillna('')
df

   A  B  C  D  E  F
A  0  1  0  1  2  0
B     0  3  1  1  1
C        0  1  8  9
D           0  2  6
E              0  9
F                 0

相关问题 更多 >