You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何基于多列二值化(1/0)DataFrame快速生成列间配对计数矩阵

快速生成二值化DataFrame的两两列计数矩阵

嘿,手动一个个列组合筛选计数确实太折腾了!其实用矩阵乘法就能一步到位,效率拉满,完全不用重复写筛选代码。

核心思路

因为你的数据是0/1二值化的,转置后的DataFrame和原DataFrame做矩阵乘法,得到的结果正好是每两列同时为1的行数——这就是你要的计数矩阵!矩阵乘法的本质是对对应位置元素相乘后求和,只有当两个元素都是1时乘积才为1,求和结果就是同时为1的行数,完美匹配需求。

代码实现

先构造一个和你结构一致的示例DataFrame:

import pandas as pd
import numpy as np

# 生成示例二值化数据(固定随机种子方便复现)
np.random.seed(42)
df = pd.DataFrame(np.random.randint(0, 2, size=(100, 7)), columns=['A', 'B', 'C', 'D', 'E', 'F', 'G'])

然后一行代码生成计数矩阵:

# 计算两两列同时为1的计数矩阵
count_matrix = df.T @ df

结果说明

输出的count_matrix是一个对称矩阵,行和列都是原DataFrame的列名:

  • count_matrix.loc['A','B'] 就是A列和B列同时为1的行数
  • 对角线的count_matrix.loc['A','A'] 是A列自身为1的总行数

如果只想保留不同列之间的配对(隐藏对角线的自身计数、避免重复的下三角数据),可以再加一步处理:

# 只保留上三角部分(k=1表示排除对角线)
count_matrix = count_matrix.where(np.triu(np.ones(count_matrix.shape), k=1).astype(bool))

这个方法不管你有多少列都能快速处理,完全不用手动写循环或者逐个筛选组合,比你原来的方法高效太多啦!

内容的提问来源于stack exchange,提问作者Veki

火山引擎 最新活动