在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

我想将它转换为一个2D矩阵,输出到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中有一种方法可以将其输出为矩阵并打印出行和列名称吗?

解决方法:

我不确定这是否尽可能优雅地完成,但是:

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

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...