我知道如何在R中执行此操作。但是,熊猫中是否有任何函数可以将数据帧转换为包含两个同时出现的计数的nxn同时出现矩阵。
例如矩阵df:
import pandas as pd df = pd.DataFrame({'TFD' : ['AA', 'SL', 'BB', 'D0', 'Dk', 'FF'], 'Snack' : ['1', '0', '1', '1', '0', '0'], 'Trans' : ['1', '1', '1', '0', '0', '1'], 'Dop' : ['1', '0', '1', '0', '1', '1']}).set_index('TFD') print df >>> Dop Snack Trans TFD AA 1 1 1 SL 0 0 1 BB 1 1 1 D0 0 1 0 Dk 1 0 0 FF 1 0 1 [6 rows x 3 columns]
将产生:
Dop Snack Trans Dop 0 2 3 Snack 2 0 2 Trans 3 2 0
由于矩阵是在对角线上镜像的,所以我想会有一种优化代码的方法。
这是一个简单的线性代数,您将矩阵与其转置相乘(您的示例包含字符串,请不要忘记将它们转换为整数):
>>> df_asint = df.astype(int) >>> coocc = df_asint.T.dot(df_asint) >>> coocc Dop Snack Trans Dop 4 2 3 Snack 2 3 2 Trans 3 2 4
如果像R答案中一样,如果您想重设对角线,则可以使用numpy的fill_diagonal:
fill_diagonal
>>> import numpy as np >>> np.fill_diagonal(coocc.values, 0) >>> coocc Dop Snack Trans Dop 0 2 3 Snack 2 0 2 Trans 3 2 0