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

如何对含ID与division列的DataFrame同列透视并生成热力图

生成适合热力图的ID-Division计数透视表

嘿,针对你的需求,我们可以快速生成一个以ID为行、division为列,值为对应出现次数的透视表,这种结构完美适配热力图的输入。下面是一步步的实现方案:

1. 先准备好示例数据

首先导入依赖库并创建你提供的DataFrame:

import pandas as pd
import numpy as np

# 创建示例数据
df = pd.DataFrame(
    np.array([['111', 'AAA'],['222','AAA'],['333','BBB'],['444','CCC'],['444','AAA'],['222','BBB'],['111','BBB']]),
    columns=['ID','division']
)

2. 生成透视计数表(两种方法任选)

我们需要统计每个ID在各个division中的出现次数,这里有两种常用的实现方式:

方法一:用pd.crosstab(最直接)

crosstab是Pandas专门用来计算交叉频数的工具,一行代码就能搞定:

# 生成透视表,fill_value=0保证没有出现的组合填充为0,适合热力图展示
pivot_result = pd.crosstab(df['ID'], df['division'], fill_value=0)

方法二:用pivot_table

如果你更习惯用透视表的通用写法,可以这样:

pivot_result = df.pivot_table(
    index='ID',       # 行是ID
    columns='division',  # 列是division
    aggfunc='size',      # 统计出现次数
    fill_value=0         # 缺失值填0
)

两种方法得到的结果完全一致,输出的透视表长这样:

division  AAA  BBB  CCC
ID                     
111        1    1    0
222        1    1    0
333        0    1    0
444        1    0    1

3. 转换为数组格式(可选)

如果需要转换成你示例中的纯数组形式,直接调用to_numpy()即可:

result_array = pivot_result.to_numpy()
# 输出:array([[1, 1, 0], [1, 1, 0], [0, 1, 0], [1, 0, 1]], dtype=int64)

小提示

  • 一定要加fill_value=0:这样所有division列都会保留,不会因为某个ID没出现过就丢列,热力图展示的时候不会有空白块,完整性更好。
  • 这个结构的透视表可以直接传给seaborn.heatmap()这类热力图工具,不需要额外调整格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:28:46