You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pandas DataFrame两列生成共有值交叉计数热图

实现方案

直接通过矩阵运算实现,是当前场景下效率最高的方案,全程只需3步:

1. 生成A-B的0-1关联矩阵

用crosstab快速生成行是B值、列是A值的0-1矩阵,值为1代表对应A包含该B值:

import pandas as pd
ab_matrix = pd.crosstab(df['B'], df['A'])

2. 矩阵乘法计算共现计数

转置后和原矩阵点乘,直接得到两两A的共有B值计数矩阵,完全符合你需要的交叉透视表格式:

cross_count = ab_matrix.T.dot(ab_matrix)

该结果对角线的值为对应A本身包含的B值总数,非对角线值就是两个不同A的共有B值数量,和你给出的示例格式完全一致。

3. 绘制热图

直接用seaborn的heatmap接口渲染即可:

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
# annot=True显示数值,fmt='d'代表用整数格式展示
sns.heatmap(cross_count, annot=True, cmap='Blues', fmt='d')
plt.xlabel('A取值')
plt.ylabel('A取值')
plt.title('不同A取值共有B值数量热图')
plt.show()

方案优势

无需循环遍历A的两两组合做交集计算,全程调用numpy优化的矩阵运算接口,即使A的取值达到数千级别也能快速出结果,远高于常规循环方案的效率。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:36:03