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

Pandas基于yoy同比增速与上年值批量计算多列当前值的方法

Pandas批量对多列同比增速计算对应实际值的方案

前置条件

你需要先确保数据集已经按日期列升序排序,且月度数据无断档(如有断档建议先将日期设为索引,用resample('M').asfreq()补全月份后再操作)。

实现方案

方案1:直接遍历列实现(无额外函数依赖,最简洁)

如果你还没封装函数,直接遍历筛选出的yoy列批量生成新列即可,仅需几行代码:

import pandas as pd

# 1. 筛选所有yoy开头的列
yoy_cols = df.filter(regex="^yoy_").columns.tolist()

# 2. 预计算上年同期value,避免每列重复计算偏移
df['ly_value'] = df['value'].shift(12)

# 3. 批量生成计算结果列
for col in yoy_cols:
    df[f"{col}_value"] = (1 + df[col]) * df['ly_value']

# 可选:删除临时生成的上年value列
df.drop(columns=['ly_value'], inplace=True)

方案2:复用已有单组计算函数

如果你已经完成了单组计算的函数封装,可以通过apply批量应用到所有yoy列:
假设你已有的单组计算函数如下:

def calculate_yoy_actual(yoy_series: pd.Series, ly_value_series: pd.Series) -> pd.Series:
    # 你的自定义逻辑(含异常值处理、边界判断等均可保留)
    return (1 + yoy_series) * ly_value_series

批量调用代码:

ly_value = df['value'].shift(12)
yoy_cols = df.filter(regex="^yoy_").columns

# 批量计算所有列后直接合并到原DataFrame
df = pd.concat([
    df,
    df[yoy_cols].apply(calculate_yoy_actual, args=(ly_value,)).add_suffix("_value")
], axis=1)

注意事项

  • 如果你的数据存在缺失月份,直接用shift(12)会出现匹配错误,需要先将日期设为索引,重采样补全缺失月份后再执行计算
  • 所有yoy列的数值格式需要是小数格式(比如同比增长15%对应值为0.15),如果是百分比字符串需要先转换为数值再计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:03