我有一个像下面这样的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的所有正确值)
最简单的方法是什么?
答案 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