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

use*_*377 2 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
Run Code Online (Sandbox Code Playgroud)

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

例如,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
Run Code Online (Sandbox Code Playgroud)

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

执行此操作最直接的方法是什么?

ayh*_*han 5

使用矩阵乘法获得两列中共有的 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
Run Code Online (Sandbox Code Playgroud)