小编典典

在python pandas中构造共现矩阵

python

我知道如何在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

由于矩阵是在对角线上镜像的,所以我想会有一种优化代码的方法。


阅读 411

收藏
2020-12-20

共1个答案

小编典典

这是一个简单的线性代数,您将矩阵与其转置相乘(您的示例包含字符串,请不要忘记将它们转换为整数):

>>> 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

>>> 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
2020-12-20