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
相关产品推荐
相关产品推荐

