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

如何用Python Pandas按ID可视化类别值的时序序列矩阵?

将ID的类别事件序列可视化为彩色矩阵

步骤1:整理数据结构

首先把原始长格式DataFrame转换为宽格式,让每一行对应一个ID,每一列对应一个时间步:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 构造原始数据
data = {
    'ID': [1,2,2,3,2,1,1,3,3],
    'CAT': ['A','C','B','A','A','B','A','B','B']
}
df = pd.DataFrame(data)

# 给每个ID的事件分配时间步(按原始顺序)
df['time_step'] = df.groupby('ID').cumcount()

# 转换为宽表:行=ID,列=time_step,值=CAT
pivot_df = df.pivot(index='ID', columns='time_step', values='CAT')

步骤2:类别转数值(适配绘图要求)

绘图函数需要数值输入,将类别映射为唯一数值:

# 定义类别到数值的映射关系
cat_map = {'A':0, 'B':1, 'C':2}
numeric_matrix = pivot_df.replace(cat_map).values

步骤3:绘制彩色矩阵

使用seaborn.heatmap实现可视化,自定义颜色对应不同类别:

# 定义对应类别的颜色(可按需调整)
colors = ['#1f77b4', '#ff7f0e', '#2ca02c']  # A=蓝色, B=橙色, C=绿色
cmap = plt.cm.colors.ListedColormap(colors)

# 绘制热图
plt.figure(figsize=(6,4))
sns.heatmap(numeric_matrix, 
            annot=pivot_df.values,  # 显示类别字母
            fmt='',  # 取消数值格式化
            cmap=cmap, 
            cbar=False,  # 隐藏默认颜色条
            xticklabels=[f'步{i+1}' for i in range(pivot_df.shape[1])],
            yticklabels=pivot_df.index)
plt.xlabel('时间步')
plt.ylabel('ID')
plt.title('ID的类别事件序列可视化')
plt.show()

补充优化

如果需要保留颜色条并对应类别,可替换cbar=False为以下代码:

cbar = plt.gcf().axes[-1]
cbar.set_ticks([0.33, 1, 1.67])
cbar.set_ticklabels(['A', 'B', 'C'])
  • 提前确认每个ID的事件数量一致,避免转换宽表时出现缺失值,可通过df.groupby('ID').size().nunique() == 1验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:45:28