我有一个看起来像这样的 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
铝01 4 0 2 3
BBR60 0 1 0 0
CA07 2 0 3 3
NL219 3 0 3 4

也就是说,Al01 列中有 4 个命中;在这 4 个命中中,没有一个是在 BBR60 列中的命中,2 个也是在 CA07 列中的命中,3 个是在 NL219 列中的命中。等等。

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

最佳答案

它只是矩阵乘法:

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]

关于python - 来自 Pandas 数据帧的成对矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21467429/

10-15 23:25