Python 从dataframe和pandas中的矩阵创建新矩阵

Python 从dataframe和pandas中的矩阵创建新矩阵,python,pandas,similarity,Python,Pandas,Similarity,我有一个数据帧df,看起来像这样: id1 id2 weights 0 a 2a 144.0 1 a 2b 52.5 2 a 2c 2.0 3 a 2d 1.0 4 a 2e 1.0 5 b 2a 2.0 6 b 2e 1.0 7 b 2f 1.0 8 b 2b 1.0 9 b 2c 0.008 以及id2列的元素之间的相似矩阵mat:

我有一个数据帧
df
,看起来像这样:

    id1  id2  weights
0   a    2a   144.0
1   a    2b   52.5
2   a    2c   2.0
3   a    2d   1.0
4   a    2e   1.0
5   b    2a   2.0
6   b    2e   1.0
7   b    2f   1.0
8   b    2b   1.0
9   b    2c   0.008
以及
id2
列的元素之间的相似矩阵
mat

    2a    2b   2c   2d   2e   2f
2a  1     0.5  0.7  0.2  0.1  0.3
2b  0.5   1    0.6  0.4  0.3  0.4
2c  0.7   0.6  1    0.1  0.4  0.2
2d  0.2   0.4  0.1  1    0.8  0.7
2e  0.1   0.3  0.4  0.8  1    0.8
2f  0.3   0.4  0.2  0.7  0.8  1
现在,我想在
id1
的元素和
id2
的元素之间创建一个相似性矩阵。为此,我考虑了<代码> ID1 元素作为<代码>对应元素的IDE < /代码> Id,我的数据文件<代码> DF< /C>(相应的<代码>权重)。 我的第一次尝试是使用循环(aouch):

但这当然不是肾盂式的,需要时间(
timeit
对于这些小矩阵显示
21.3ms
对于10k行
df
和3k乘3k
mat
)不可计算)。哪种方法更干净/有效

期望输出:

    2a          2b          2c          2d          2e          2f
a   0.857606    0.630424    0.672319    0.258354    0.163342    0.329676
b   0.580192    0.540096    0.520767    0.459425    0.459904    0.559425
是否有方法计算
id1
元素之间的另一个相似性矩阵(从该数据)


提前感谢您。

以下时钟为6–7毫秒(而您的方法在我的机器上大约为30毫秒)

输出:

id2        2a        2b        2c        2d        2e        2f
id1                                                            
a    0.857606  0.630424  0.672319  0.258354  0.163342  0.329676
b    0.580192  0.540096  0.520767  0.459425  0.459904  0.559425

以下时钟为6–7毫秒(与我的机器上的30毫秒相比)

输出:

id2        2a        2b        2c        2d        2e        2f
id1                                                            
a    0.857606  0.630424  0.672319  0.258354  0.163342  0.329676
b    0.580192  0.540096  0.520767  0.459425  0.459904  0.559425

你真是个天才,现在在我的原始数据帧上只需不到2秒。。。它的规模完美,投票和接受,谢谢!好吧,我的错,它在我的示例中运行良好(数据帧的1%),但在大的示例中需要10分钟。当我试图重新应用它以获得矩阵
id1
/
id1
时,我得到了一个MemoryError..你是个天才,现在在我的原始数据帧上只需不到2秒。。。它的规模完美,投票和接受,谢谢!好吧,我的错,它在我的示例中运行良好(数据帧的1%),但在大的示例中需要10分钟。当我试图重新应用它以获得矩阵
id1
/
id1
时,我得到一个MemoryError。。
id2        2a        2b        2c        2d        2e        2f
id1                                                            
a    0.857606  0.630424  0.672319  0.258354  0.163342  0.329676
b    0.580192  0.540096  0.520767  0.459425  0.459904  0.559425