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

如何用Pandas计算时间序列中连续两年周期的均值?

嘿,这个需求我之前也碰到过,循环确实不够高效,用Pandas的时间索引和向量化操作就能轻松搞定!

高效计算连续两年周期的均值

首先,确保你的DataFrame已经设置了DatetimeIndex(这是时间序列操作的基础),如果还没做,先完成转换:

# 假设你的日期列名为'date'
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

接下来,我们可以通过动态生成两年窗口的时间范围,结合Pandas的布尔索引和向量化计算来实现,完全避免低效的循环:

方法一:动态生成两年窗口并计算均值

这种方法会自动适配你的数据年份范围(不需要硬编码2014-2017):

# 获取数据中的最小和最大年份
min_year = df.index.year.min()
max_year = df.index.year.max()

# 生成所有连续的两年组合(比如2014-2015, 2015-2016...)
year_pairs = [(y, y+1) for y in range(min_year, max_year)]

# 用列表推导式批量计算每个窗口的均值,再合并结果
two_year_means = pd.concat(
    [
        # 筛选当前两年窗口内的数据,计算均值并命名列
        df[(df.index.year >= start) & (df.index.year <= end)].mean().to_frame(name=f"{start}-{end}")
        for start, end in year_pairs
    ],
    axis=1
).T  # 转置让年份对成为索引,更直观

运行后,two_year_means会是一个新的DataFrame:

  • 索引是两年周期的标识(比如"2014-2015")
  • 列是原DataFrame的各个数值列
  • 值对应每个两年窗口内所有行的均值

额外验证小技巧

如果你想验证结果准确性,可以单独计算某一个窗口的均值对比:

# 验证2014-2015的均值
df[(df.index.year >=2014) & (df.index.year <=2015)].mean()

这个结果和two_year_means.loc['2014-2015']应该完全一致。

这种方法的优势是利用了Pandas的向量化操作,比循环快得多,尤其是当数据量变大时效果更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:34:00