我有一个这样的PandasDataFrame

MemberID    A    B    C    D
1           0.3  0.5 0.1   0
2           0    0.2 0.9   0.3
3           0.4  0.2 0.5   0.3
4           0.1  0   0     0.7

我想要另一个矩阵,它给出了除MemberID之外的每列交集的非零元素数。
例如,列AB的交集为2(因为MemberID1和3对于AB具有非零值),列AC的交集也为2(因为MemberID1和3对于AC具有非零值)。
最后的矩阵如下:
    A    B    C    D
A   3    2    2    2
B   2    3    3    2
C   2    3    3    2
D   2    2    2    3

如我们所见,它应该是对称矩阵,类似于相关矩阵,但不是相关矩阵。
任意两列的交集=ofMemberID在两列中都有非零值。
我会在这里显示一些初始代码,但我觉得有一个简单的函数来完成这个任务,我不知道。
下面是创建DataFrame的代码:
df = pd.DataFrame([[0.3, 0.5,  0.1, 0],
                   [0,  0.2,  0.9, 0.3],
                   [ 0.4,  0.2,  0.5, 0.3],
                   [ 0.1, 0, 0,  0.7]],
                  columns=list('ABCD'))

任何指点都将不胜感激。蒂亚。

最佳答案

这应该是:

z = (df != 0) * 1
z.T.dot(z)

python - DataFrame的给定列不为零的行数-LMLPHP

09-06 17:15