如何转换对称矩阵:

  A B C D
A 1 2 3 4
B 2 1 2 3
C 3 2 1 2
D 4 3 2 1

进入邻接矩阵?:

A A 1
A B 2
A C 3 
A D 4
B A 3
B B 1
B C 2
B D 3
C A 3
C C 1
C D 2
D A 4
D B 3
D C 2
D D 1

有什么功能吗?(提前感谢)

推荐答案

假设一个Pandas 数据帧作为输入,您可以使用numpy获得triu_indices:

import pandas as pd
import numpy as np

l = [[1, 2, 3, 4], [2, 1, 2, 3], [3, 2, 1, 2], [4, 3, 2, 1]]
df = pd.DataFrame(l, index=list('ABCD'), columns=list('ABCD'))

#    A  B  C  D
# A  1  2  3  4
# B  2  1  2  3
# C  3  2  1  2
# D  4  3  2  1

a = df.to_numpy()
x,y = np.triu_indices(len(df))

out = pd.DataFrame({'x': df.index[x], 'y':  df.columns[y], 'value': a[x,y]})

输出:

   x  y  value
0  A  A      1
1  A  B      2
2  A  C      3
3  A  D      4
4  B  B      1
5  B  C      2
6  B  D      3
7  C  C      1
8  C  D      2
9  D  D      1
all combinations
df.reset_index().melt('index', var_name='column')

输出:

   index column  value
0      A      A      1
1      B      A      2
2      C      A      3
3      D      A      4
4      A      B      2
5      B      B      1
6      C      B      2
7      D      B      3
8      A      C      3
9      B      C      2
10     C      C      1
11     D      C      2
12     A      D      4
13     B      D      3
14     C      D      2
15     D      D      1

或者,对于不同的顺序:

df.stack().rename_axis(['index', 'columns']).reset_index(name='value')

输出:

   index columns  value
0      A       A      1
1      A       B      2
2      A       C      3
3      A       D      4
4      B       A      2
5      B       B      1
6      B       C      2
7      B       D      3
8      C       A      3
9      C       B      2
10     C       C      1
11     C       D      2
12     D       A      4
13     D       B      3
14     D       C      2
15     D       D      1

Python相关问答推荐

如何使用使用来自其他列的值的公式更新一个rabrame列?

将CSS链接到HTML文件的问题

有没有办法在不先将文件写入内存的情况下做到这一点?

在Django中重命名我的表后,旧表中的项目不会被移动或删除

高效生成累积式三角矩阵

使用OpenPYXL切换图表上的行/列

如何让doctest在mkdocs的标记代码块中运行示例?

如何在保持sibling 姐妹美汤的同时插入和删除标签?

Pandas dataframe中str.place()的奇怪行为.删除与目标字符串不匹配的值

带极点数据帧的倒数值(&Q;)

Django LoginView中的一个大问题

如何在pandas DataFrame列中保持一个只增加的数字序列?

sklearn ridgeCV与ElasticNetCV

如何从表示音频的Numy数组中提取持续时间和偏移量?

如何只保留Pandas DataFrame尾部的第一个重复行?

Pandas 中的每行布尔运算

Selify urllib.error.HTTPError:HTTP错误404:未找到

FlaskApp无法在Google Cloud Run上运行:服务不可用503错误

使用CSS Select 器和::before抓取不会显示文本

Discord.py速率限制