csv 将列成对的单个行数据转换为相关矩阵

guz6ccqo  于 2024-01-03  发布在  其他
关注(0)|答案(2)|浏览(146)

我尝试将z得分(axa)、(axb)值转换为相关矩阵,如下所示。


的数据
第一行的单行相关矩阵如下所示:



有没有什么方法可以在Python中轻松地转换我的csv?转换后我应该可以做到:

import pandas as pd
con = pd.read_csv('Data/connectivity.csv')
# Do transform here
cormat = con.corr()
round(cormat,2)
sns.heatmap(cormat);

字符串
谢谢
凯文
编辑
很抱歉,我的编辑,所以我忘了提到,我将只创建一个连接矩阵(相关矩阵),在本例中,通过取4行的平均值。
于是只好做了一个:

import pandas as pd
con = pd.read_csv('Data/connectivity.csv')
con_average = con.mean()
tmp = con_average.set_axis(df.columns.str.split(' vs ',expand=True))
out = tmp.iloc[0].unstack()

watbbzwu

watbbzwu1#

假设此输入:

a x a     a x b     a x c     b x a  b x b    b x c    c x a    c x b  c x c
0      1  0.315900    0.5391  0.315900      1  0.45100  0.53910  0.45100      1
1      1  0.387880   0.30813  0.387880      1  0.33133  0.30813  0.33133      1
2      1 -0.021537  -0.30658 -0.021537      1  0.68163 -0.30658  0.68163      1
3      1 -0.001746   0.11458 -0.001746      1  0.39171  0.11458  0.39171      1

字符串
你可以先将列名split到MultiIndex中:

tmp = df.set_axis(df.columns.str.split(' x ', expand=True), axis=1)


然后,如果你想从第一行开始构建矩阵,将其切片并unstack

out = tmp.iloc[0].unstack()


输出量:

a       b       c
a       1  0.3159  0.5391
b  0.3159       1   0.451
c  0.5391   0.451       1


要为每一行构建一个新的嵌套框架,可以执行以下任一循环:

dfs = [tmp.iloc[i].unstack() for i in range(tmp.shape[0])]


或者先用stack,然后用groupby拆分:

dfs = [g for _, g in tmp.stack().groupby(level=0)]

输出量:

[          a       b       c
 0 a       1  0.3159  0.5391
   b  0.3159  1.0000  0.4510
   c  0.5391  0.4510  1.0000,
             a        b        c
 1 a         1  0.38788  0.30813
   b   0.38788  1.00000  0.33133
   c  0.30813,  0.33133  1.00000,
             a         b        c
 2 a         1 -0.021537 -0.30658
   b -0.021537  1.000000  0.68163
   c  -0.30658  0.681630  1.00000,
             a         b        c
 3 a         1 -0.001746  0.11458
   b -0.001746  1.000000  0.39171
   c   0.11458  0.391710  1.00000]


如果要对行求平均值:

out = (df.set_axis(df.columns.str.split(' x ', expand=True), axis=1)
         .mean().unstack()
      )

输出量:

a         b         c
a  1.000000  0.170124  0.163808
b  0.170124  1.000000  0.463917
c  0.163808  0.463917  1.000000

中间体tmp

a                             b                    c            
   a         b         c         a  b        c        a        b  c
0  1  0.315900    0.5391  0.315900  1  0.45100  0.53910  0.45100  1
1  1  0.387880   0.30813  0.387880  1  0.33133  0.30813  0.33133  1
2  1 -0.021537  -0.30658 -0.021537  1  0.68163 -0.30658  0.68163  1
3  1 -0.001746   0.11458 -0.001746  1  0.39171  0.11458  0.39171  1
pdtvr36n

pdtvr36n2#

对于每一行,您需要将数组重新整形为3x3矩阵:

row_1_reshaped = con.iloc[0].values.reshape((3,3)) # this is the first row
row_2_reshaped = con.iloc[1].values.reshape((3,3)) # this is the second row

字符串

相关问题