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乘3kmat
)不可计算)。哪种方法更干净/有效
期望输出:
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