在Python中将表转换为矩阵
我有一个数据,格式是 pandas 的数据框(df):
每一列的名字都是由开始节点和结束节点组成,中间用 '_' 分隔。比如说,'A_B' 就表示开始节点是 A,结束节点是 B。
A_A A_B A_C B_B B_A B_C C_C C_A C_B
12 23 33 43 19 98 44 77 35
我想把它转换成一个二维矩阵,并输出为一个 CSV 文件,格式应该是这样的:
A B C
A 12 23 33
B 19 43 98
C 77 35 44
为此,假设我们有
from itertools import groupby, combinations_with_replacement
col_names = ['A','B','C']
for i in combinations_with_replacement(col_names, 2):
get_val = df[i[0]+'_'+i[1]]
在 pandas 中,有没有办法把这个输出成一个矩阵,并且打印出行和列的名字呢?
相关文章:
- 暂无相关问题
1 个回答
6
我不太确定这些操作是否做得很优雅,但:
df = pd.read_clipboard()
df
Out[3]:
A_A A_B A_C B_B B_A B_C C_C C_A C_B
0 12 23 33 43 19 98 44 77 35
dfT = df.transpose().reset_index()
dfT
Out[8]:
index 0
0 A_A 12
1 A_B 23
2 A_C 33
3 B_B 43
4 B_A 19
5 B_C 98
6 C_C 44
7 C_A 77
8 C_B 35
dfT['col_name'] = dfT['index'].str.split('_').map(lambda x: x[1])
dfT['row_name'] = dfT['index'].str.split('_').map(lambda x: x[0])
dfT.pivot(index='row_name', columns='col_name', values=0)
Out[17]:
col_name A B C
row_name
A 12 23 33
B 19 43 98
C 77 35 44
还有,如果想要去掉索引的名字:
final_mat = dfT.pivot(index='row_name', columns='col_name', values=0)
final_mat
Out[19]:
col_name A B C
row_name
A 12 23 33
B 19 43 98
C 77 35 44
final_mat.index.name = None
final_mat.columns.name = None
final_mat
Out[22]:
A B C
A 12 23 33
B 19 43 98
C 77 35 44