如何在Pandas中将多级索引Series转为pivot table并绘制heatmap
实现Animal-Idol透视表转换及热力图绘制
一、从现有数据生成透视表
1. 基于两级索引的Series
假设你的两级索引Series名为count_series,第一级索引是Animal,第二级是Idol,值为重复次数总和。直接用unstack()方法即可转换为目标格式的透视表:
# 转换为透视表,缺失值填充为0 pivot_table = count_series.unstack(level='Idol', fill_value=0)
若索引层级无显式名称,也可通过层级位置指定(比如Animal是第0层、Idol是第1层):
pivot_table = count_series.unstack(level=1, fill_value=0)
2. 基于原始配对DataFrame
假设原始DataFrame名为raw_df,每行代表一次Animal与Idol的配对记录,用pivot_table()方法直接统计频次并生成透视表:
# 统计每个组合的出现次数,生成透视表 pivot_table = raw_df.pivot_table( index='Animal', columns='Idol', aggfunc='size', # 统计行数即配对次数 fill_value=0 )
如果原始DataFrame已有记录重复次数的列(比如名为count),则指定values参数求和:
pivot_table = raw_df.pivot_table( index='Animal', columns='Idol', values='count', aggfunc='sum', fill_value=0 )
二、绘制热力图
使用seaborn的heatmap可快速生成反映数值大小的热力图,代码示例如下:
import seaborn as sns import matplotlib.pyplot as plt # 设置绘图风格 sns.set_style("whitegrid") # 绘制热力图 plt.figure(figsize=(10, 6)) # 自定义图的尺寸 ax = sns.heatmap( pivot_table, annot=True, # 在单元格内显示具体数值 cmap='Blues', # 颜色映射,深色对应高数值 fmt='d', # 数值显示格式,'d'代表整数 cbar=True # 显示右侧颜色条 ) # 设置标签与标题 ax.set_title('Animal-Idol配对次数热力图') ax.set_xlabel('Idol') ax.set_ylabel('Animal') # 展示图形 plt.show()
annot=True:可选,开启后便于直接读取单元格数值cmap:可替换为'Greens'、'Reds'等其他颜色映射fmt:若数值为浮点数,可改为'.2f'保留两位小数
内容的提问来源于stack exchange,提问作者Adam Zienkowicz
相关产品推荐
相关产品推荐

