如何使用列共享的项目百分比制作新的pandas DataFrame

时间:2017-08-10 16:37:52

标签: python pandas

我有一个像下面这样的pandas DataFrame:

df = pd.DataFrame(np.random.randint(0,2,size=(5, 4)),
columns=list('ABCD'))

    A   B   C   D
0   1   1   1   1
1   0   1   0   0
2   1   1   1   1
3   1   0   0   1
4   0   1   0   1

我想找到每列的计数重叠百分比与DataFrame中的所有其他列的重叠百分比。

例如,列A与列B共有2个共享1,并且总共包含3个1。这意味着重叠66%。 B包含4个1,并且与A列共有2个共享1个。这意味着重叠50%。

因此,我想获得一个新的DataFrame,其中包含所有列对的百分比值:

    A   B   C   D
A   100 50  43  31
B   66  100 91  19
C   38  52  100 65
D   23  29  68  100

(只是一个例子,不包含第一个DataFrame的所有正确值)

最简单的方法是什么?

1 个答案:

答案 0 :(得分:4)

使用矩阵乘法来获得两列中常见的1的数量。要标准化,除以列总和:

df.T.dot(df) / df.sum()
Out: 
          A     B    C     D
A  1.000000  0.50  1.0  0.75
B  0.666667  1.00  1.0  0.75
C  0.666667  0.50  1.0  0.50
D  1.000000  0.75  1.0  1.00