2017-08-10 42 views
2

我有一个熊猫数据帧像下面列共享项目的百分比新的熊猫数据帧:如何使与

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 

我想找到比较1S的计数重叠的每一列的百分比与DataFrame中的所有其他列一起使用。

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

,因为我想获得其中包含的所有列对百分比值的新数据帧的结果:

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

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

这样做最简单的方法是什么?

回答

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

优雅的解决方案+1 –

+0

@AntonvBR谢谢。 – ayhan