PythonPandas构建完整的对比矩阵

2024-09-28 21:49:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用Python的特定查询。
抱歉,你的演讲太差了

我有一个这样的朋友

CG | T
------


    10   | 0.5   
    21   | 0.2  
    33   | 0.3  
    45   | 0.6

我想为CG构建所有可能的对比
那大概是

CG1 || CG2 || T1 || T2 || contrast||   
10 || 21 || 0.5 || 0.2 || 0.3 ||   
10 || 33 || 0.5 || 0.3 || 0.2 ||   
10 || 45 || 0.5 || 0.6 || -0.1 ||   
21 || 33 || 0.2 || 0.3 || -0.1 ||     
21 || 45|| 0.2 || 0.6  || -0.4 ||   
33 || 45 || 0.3 || 0.6 || -0.3 || 

我做了一个循环,循环所有的行并合并回来-当数据变大时效率不高(ncg=800) 我想知道1)是否有一种有效的方法来执行这样的循环或/和2)将df转换成如下的契约矩阵:

--- || 10 || 21 || 33 || 45 ||  
10 || 0.5 || 0.3 || 0.2 || -0.1 ||    
21 || 0.3 || 0.2 || -0.1 || -0.4 ||  
33 || 0.2 || -0.1 || 0.3 || -0.3 ||   
45|| -0.1 || -0.4 ||-0.3 || 0.6 ||

我读过几篇关于高效循环的文章——这个查询的特殊性在于我想在所有组之间建立对比(CG);这就像用对角矩阵分层,并希望用对角元素的差异填充所有非对角单元格(因此我想到使用矩阵)

干杯


Tags: 数据方法df文章朋友矩阵cg效率
1条回答
网友
1楼 · 发布于 2024-09-28 21:49:26

下面是一个NumPy方法,使用初始化和分步分配-

n = a.shape[0]
r,c = np.triu_indices(n,1)
L = len(r)
out = np.empty((L,5))
out[:,:-1:2] = a[r]
out[:,1::2] = a[c]
out[:,-1] = out[:,2] - out[:,3]

样本输入,输出-

In [105]: a
Out[105]: 
array([[ 10. ,   0.5],
       [ 21. ,   0.2],
       [ 33. ,   0.3],
       [ 45. ,   0.6]])

In [106]: out
Out[106]: 
array([[ 10. ,  21. ,   0.5,   0.2,   0.3],
       [ 10. ,  33. ,   0.5,   0.3,   0.2],
       [ 10. ,  45. ,   0.5,   0.6,  -0.1],
       [ 21. ,  33. ,   0.2,   0.3,  -0.1],
       [ 21. ,  45. ,   0.2,   0.6,  -0.4],
       [ 33. ,  45. ,   0.3,   0.6,  -0.3]])

pandas数据帧接口的唯一工作是使用a = df.values获取输入数组a,其中df是输入数据帧,然后使用所提出的方法。最后,可以通过调用pd.Dataframe(out)将输出转换为数据帧来获得输出数据帧

相关问题 更多 >