Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python熊猫构建完整的对比矩阵_Python_Loops_Pandas_Numpy_Matrix - Fatal编程技术网

Python熊猫构建完整的对比矩阵

Python熊猫构建完整的对比矩阵,python,loops,pandas,numpy,matrix,Python,Loops,Pandas,Numpy,Matrix,我有一个使用Python的特定查询。 对拙劣的演讲表示歉意 我有一个这样的df 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

我有一个使用Python的特定查询。
对拙劣的演讲表示歉意

我有一个这样的df

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 || 
我做了一个循环,循环所有行并合并回来-当数据变大时效率不高(n CG=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);这就像用对角矩阵分层,并希望用对角元素的差异填充所有非对角单元格(因此我想到使用矩阵)


干杯

这里有一个简单的方法,使用分步初始化和赋值-

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)
将输出转换为数据帧,以获得输出数据帧。

优秀的东西Divakar-我将对其进行测试!非常感谢@捷运。如果可能的话,我希望从您的实际数据集中得到一些加速数字。现在就开始运行!非常有效的一段代码-猜测时间增益+50%。非常感谢迪瓦卡。干杯