我有一个如下所示的 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 的所有正确值)
执行此操作最直接的方法是什么?
使用矩阵乘法获得两列中共有的 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)
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |