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

如何基于日期而非周期数计算带Datetime Index的Dataframe同比变化率

基于日期批量计算多频率时间序列的同比变化率

完全可以基于日期来批量计算不同频率序列的同比变化率,不用手动指定固定周期数,核心是利用pandas的日期偏移功能匹配去年同期数据。

实现步骤

  1. 统一管理Dataframe:把所有需要处理的Dataframe放进一个字典里,方便批量遍历。
  2. 匹配去年同期数据:对每个Dataframe的日期索引减去1年,生成去年同期的日期序列,再用reindex匹配对应的值。
  3. 计算同比并新增列:用当前值减去去年同期值,再除以去年值得到同比变化率,作为新列添加到原Dataframe中。

完整代码示例

import pandas as pd

# 把你的Dataframe存入字典(替换成实际变量名)
dataframes = {
    'gdp': gdp,
    'pce': pce,
    'spx': spx
}

# 批量遍历处理每个Dataframe
for df_name, df in dataframes.items():
    # 假设每个Dataframe只有一列,获取列名
    target_col = df.columns[0]
    # 生成去年同期的日期索引
    last_year_dates = df.index - pd.DateOffset(years=1)
    # 匹配去年同期的数值
    last_year_values = df[target_col].reindex(last_year_dates).values
    # 计算同比变化率,新增列命名为「原列名_YoY」
    df[f'{target_col}_YoY'] = (df[target_col] - last_year_values) / last_year_values

扩展说明

  • 多列Dataframe适配:如果你的Dataframe包含多列,只需把代码里的target_col = df.columns[0]改成遍历所有列即可,示例如下:
    for df_name, df in dataframes.items():
        for target_col in df.columns:
            last_year_dates = df.index - pd.DateOffset(years=1)
            last_year_values = df[target_col].reindex(last_year_dates).values
            df[f'{target_col}_YoY'] = (df[target_col] - last_year_values) / last_year_values
    
  • 缺失值处理:如果去年同期没有对应日期(比如日度数据的节假日),reindex会返回NaN,对应的同比值也会是NaN,符合实际业务逻辑。
  • 自动适配频率:不管是季度、月度还是日度数据,都不需要手动设置周期数,完全基于日期匹配,避免了固定周期数带来的误差(比如日度数据每年交易日数不一定是252)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:39:18