微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐