Python熊猫构建完整的对比矩阵
我有一个使用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
对拙劣的演讲表示歉意 我有一个这样的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%。非常感谢迪瓦卡。干杯