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

Julia使用DataFrames按分组实现两年滚动累乘列的方法咨询

Julia DataFrame 分组滚动累乘最优实现方案

你可以将滚动周期封装为参数,配合分组内的排序逻辑保证时间顺序正确性,即可实现优雅的可扩展滚动计算,同时原生兼容Date类型的年份锚定需求,完整实现如下:

依赖准备

using DataFramesMeta, RollingFunctions

如果业务数据存在断档年份(比如某分组缺少年份记录),可额外引入Dates包做日期补全,避免滚动计算错位。

单流程可扩展实现代码

# 滚动周期可自由调整,需要改成30年窗口仅需修改此处数值即可
const ROLLING_WINDOW = 2

df = @linq df |>
    # 先按分组+时间排序,不管原始数据顺序如何都能保证时间逻辑正确
    sort!([:region, :product, :year]) |>
    groupby([:region, :product]) |>
    transform(
        ProValue = cumprod(:Growth .+ 1),
        # pad参数自动在不足窗口长度的位置填充missing,无需手动拼接数组
        ProValue2YrTrailing = rolling(prod, :Growth .+ 1, ROLLING_WINDOW, pad=missing)
    )

实现说明

  • 该写法完全保留你原有逻辑的计算结果,同时省略了手动拼接missing数组的冗余代码
  • 滚动周期参数化后,调整窗口大小时仅需修改一处常量,扩展到30年滚动非常方便
  • 提前加入的排序步骤,可兼容乱序原始数据、Date类型时间字段的计算需求,不会出现时间顺序错误导致的计算偏差
  • 如果存在断档年份场景,可在分组排序后先做日期补全,给缺失年份的Growth填充对应默认值后再做滚动计算,保证时间窗口的准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:57:03