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

Julia DataFrame滚动360天销售额精确求和方案咨询

在Julia DataFrame中计算过去360天滚动销售总额

下面提供两种实现方式,分别适配小数据集和大数据集场景:

方法一:直接逐行筛选(适合小数据集)

先确保数据按日期排序,再对每个日期筛选出过去360天内的销售额并求和:

using DataFrames, Dates

# 替换为你的实际DataFrame
df = DataFrame(
    date = Date(2020,1,1):Day(1):Date(2023,12,31),
    sales = rand(1:100, length(Date(2020,1,1):Day(1):Date(2023,12,31)))
)

# 按日期排序(核心前置步骤,保证筛选逻辑正确)
sort!(df, :date)

# 添加滚动360天销售额列
df[!, :rolling_360d_sales] = [sum(df.sales[(df.date .>= d - Day(360)) .& (df.date .<= d)]) for d in df.date]

方法二:累积和+二分查找(适合大数据集,效率更高)

利用累积和数组与二分查找定位区间,将时间复杂度从O(n²)优化至O(n log n):

using DataFrames, Dates

# 先确保数据按日期排序
sort!(df, :date)

# 计算销售额累积和
cum_sales = cumsum(df.sales)

# 对每个日期,用二分查找定位过去360天的起始索引
start_indices = searchsortedfirst.(Ref(df.date), df.date .- Day(360))

# 通过累积和快速计算区间和
df[!, :rolling_360d_sales] = map(enumerate(start_indices)) do (i, start_idx)
    cum_sales[i] - (start_idx > 1 ? cum_sales[start_idx-1] : 0)
end

注意事项

  • 必须先对DataFrame按日期列排序,否则筛选或索引定位会出错
  • 若日期列不是Date类型,先通过df.date = Date.(df.date)转换为标准日期类型
  • 存在重复日期时,两种方法都能正确计算区间内的所有销售额

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:45:03