一尘不染

来自pandas数据帧的成对矩阵

python

我有一个pandas数据框,看起来像这样:

             Al01 BBR60 CA07 NL219
AAEAMEVAT MP NaN MP MP 
AAFEDLRLL NaN NaN NaN NaN
AAGAAVKGV NP NaN NP NP 
ADRGLLRDI NaN NP NaN NaN 
AEIMKICST PB1 NaN NaN PB1 
AFDERRAGK NaN NaN NP NP 
AFDERRAGK NP NaN NaN NaN

一千行左右,六列。大多数单元格为空(NaN)。考虑到不同的列中包含文本,我想知道每列中文本的概率是多少。例如,这里的小片段将产生如下内容:

            Al01 BBR60 CA07 NL219
Al01 4 0 2 3
BBR60 0 1 0 0
CA07 2 0 3 3
NL219 3 0 3 4

也就是说,Al01栏中有4个匹配项;在这4个匹配中,BBR60列中没有匹配,CA07列中也没有匹配,NL219列中有3个匹配。等等。

我可以遍历每一列并使用值构建字典,但这似乎很笨拙。有没有更简单的方法?


阅读 288

收藏
2021-01-20

共1个答案

一尘不染

它只是矩阵乘法:

import pandas as pd
df = pd.read_csv('data.csv',index_col=0, delim_whitespace=True)
df2 = df.applymap(lambda x: int(not pd.isnull(x)))
print df2.T.dot(df2)

输出:

           Al01  BBR60  CA07  NL219
Al01      4      0     2      3
BBR60     0      1     0      0
CA07      2      0     3      3
NL219     3      0     3      4

[4 rows x 4 columns]
2021-01-20