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

如何重置Pandas DataFrame索引以在同一张图上叠加不同年份数据

嘿,我完全懂你的困扰——两组间隔一年的数据画出来各占图表的两边,根本没法直观对比对吧?别着急,咱们可以通过对齐时间轴的相对日期来解决这个问题,把两年的数据都映射到同一段时间区间里,这样就能完美叠加展示了!下面给你两种实用的解决方案:

方法1:用“一年中的第几天”作为统一X轴

这种方法简单直接,把每个日期转换成1-366的数值,忽略年份差异,直接基于全年天数绘图:

import pandas as pd
import matplotlib.pyplot as plt

# 假设你的扩展均值数据列叫'extended_mean'
# 给两个DataFrame添加“一年中的第几天”列
df1['day_of_year'] = df1.index.dayofyear
df2['day_of_year'] = df2.index.dayofyear

# 绘制叠加图
plt.figure(figsize=(10, 6))
plt.plot(df1['day_of_year'], df1['extended_mean'], label='Year 1', alpha=0.7)
plt.plot(df2['day_of_year'], df2['extended_mean'], label='Year 2', alpha=0.7)

# 美化图表
plt.xlabel('Day of Year')
plt.ylabel('Extended Mean')
plt.title('Overlayed Extended Mean (Two Years)')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

小提示:处理闰年问题

如果其中一年是闰年,2月29日会导致day_of_year多一天,你可以把这一天映射到2月28日对应的天数,避免X轴错位:

# 把闰年的2月29日(day_of_year=60)替换为2月28日的数值(59)
df1.loc[df1.index.dayofyear == 60, 'day_of_year'] = 59
df2.loc[df2.index.dayofyear == 60, 'day_of_year'] = 59

方法2:替换年份,保留日期格式

如果你想让X轴显示月份(比如“Jan”“Mar”),更直观展示季节变化,可以把其中一个DataFrame的年份替换成和另一个一致:

# 复制df2并修改年份为df1的起始年份
df2_aligned = df2.copy()
target_year = df1.index[0].year
df2_aligned.index = df2_aligned.index.map(lambda dt: dt.replace(year=target_year))

# 现在两个DataFrame的索引日期年份相同,直接叠加绘图
plt.figure(figsize=(10, 6))
plt.plot(df1.index, df1['extended_mean'], label='Year 1', alpha=0.7)
plt.plot(df2_aligned.index, df2_aligned['extended_mean'], label='Year 2', alpha=0.7)

# 设置X轴日期自动旋转,避免重叠
plt.gcf().autofmt_xdate()
plt.xlabel('Date')
plt.ylabel('Extended Mean')
plt.title('Overlayed Extended Mean (Two Years)')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

两种方法都能实现你要的叠加效果,你可以根据图表的展示需求来选:方法1适合看全年的整体趋势,方法2适合按月份对比细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:34:55