如何将pandas月度涨跌幅数据转换为年索引月列格式并绘制热力图
解决方案
1. 转换为年份为索引、月份为列的格式
你已计算得到的月度涨跌幅数据为DatetimeIndex索引的序列,直接提取索引的年份、月份维度后做宽表转换即可,示例代码如下:
# 假设你已计算得到的月度涨跌幅结果存储在变量 monthly_pct 中 # 提取年份、月份维度后unstack转宽表 pivot_df = monthly_pct.groupby([monthly_pct.index.year, monthly_pct.index.month]).first().unstack() # 优化列名和索引名 pivot_df.columns = [f"{m}月" for m in pivot_df.columns] pivot_df.index.name = "年份" # 可选:删除全空的2009年数据(仅12月为NaN) pivot_df = pivot_df.dropna(how="all")
转换后pivot_df就是你需要的以年份为行索引、月份为列的格式。
2. 绘制对应热力图
搭配seaborn库可以快速实现你需要的涨跌幅热力图效果,示例代码如下:
import matplotlib.pyplot as plt import seaborn as sns # 解决中文显示乱码问题 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 设置画布尺寸 plt.figure(figsize=(12, 6)) # 绘制热力图,红黄绿配色对应涨跌,显示每个单元格数值 sns.heatmap( pivot_df, annot=True, # 显示单元格数值 cmap="RdYlGn", # 红-黄-绿配色,适配涨跌场景 center=0, # 0值对应配色中心 fmt=".2f", # 数值保留两位小数 cbar_kws={"label": "月度涨跌幅(%)"} ) # 设置轴标签和标题 plt.title("历年月度涨跌幅热力图") plt.xlabel("月份") plt.ylabel("年份") plt.show()
内容的提问来源于stack exchange,提问作者Kogelet
相关产品推荐
相关产品推荐

