如何绘制年周多级索引pandas DataFrame的连续时间序列图
解决方案
核心思路是将多级索引中的年份、周数组合为连续的时间戳序列作为x轴,避免绘图工具按年份索引分组绘制多条曲线。
步骤1:导入依赖库
import pandas as pd import matplotlib.pyplot as plt
步骤2:将年+周转换为连续时间戳
针对你现有的多级索引DataFrame(假设变量名为df,值列名为Hohokus_gage),执行如下处理:
# 把多级索引转为普通列 df = df.reset_index() # 构造ISO标准日期,完美兼容53周场景 df['date'] = pd.to_datetime( df['year'].astype(str) + '-W' + df['weekofyear'].astype(str) + '-1', format='%G-W%V-%u' ) # 可选:按周对齐时间轴,补全缺失周的空值(避免时间轴跳变) df = df.set_index('date').sort_index().asfreq('W-MON')
格式说明:
%G代表ISO周所属年份,%V代表ISO周数(取值1-53),%u代表周几(1对应周一),该格式可以正确识别存在53周的年份,不会出现日期解析错误。
步骤3:绘制连续时间序列图
直接用处理好的日期作为x轴绘图即可,只会生成一条连续曲线:
plt.figure(figsize=(16,6)) plt.plot(df.index, df['Hohokus_gage'], linewidth=0.8) plt.xlabel('日期') plt.ylabel('Hohokus_gage值') plt.title('1923年-2020年周度序列变化') plt.grid(alpha=0.3) plt.show()
注意事项
- 如果你的周数规则不是ISO周,可调整
to_datetime的格式参数适配,比如用%Y-W%U-%w适配美国周数规则 - 如果你不需要补全缺失周,可跳过
asfreq步骤,直接用df.plot(x='date', y='Hohokus_gage')绘图
内容的提问来源于stack exchange,提问作者Bernardo Trindade
相关产品推荐
相关产品推荐

