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

如何在Julia中按分组计算DataFrame连续行的差值?

问题描述

我创建了如下名为df的DataFrame:

using DataFrames

df = DataFrame(group = ["A", "A", "A", "A", "B", "B", "B", "B"],
               value = [2,1,4,3,3,5,2,1])

对应的输出为:

8×2 DataFrame
 Row │ group   value 
     │ String  Int64 
─────┼───────────────
   1 │ A           2
   2 │ A           1
   3 │ A           4
   4 │ A           3
   5 │ B           3
   6 │ B           5
   7 │ B           2
   8 │ B           1

我需要按group分组,计算value列中连续行与前一行的差值,每组首行填充NaN,期望输出如下:

8×3 DataFrame
 Row │ group   value  diff    
     │ String  Int64  Float64 
─────┼────────────────────────
   1 │ A           2    NaN
   2 │ A           1     -1.0
   3 │ A           4      3.0
   4 │ A           3     -1.0
   5 │ B           3    NaN
   6 │ B           5      2.0
   7 │ B           2     -3.0
   8 │ B           1     -2.0
解决方案

可以借助DataFrames的分组功能结合transform和diff函数实现需求:

using DataFrames

transform(groupby(df, :group), :value => (x -> vcat(NaN, diff(x))) => :diff)

代码说明

  • groupby(df, :group):按group列对DataFrame完成分组
  • :value => (x -> vcat(NaN, diff(x))) => :diff:针对每个分组的value列执行操作:
    • diff(x)计算当前行与前一行的差值,返回数组长度比原分组少1
    • vcat(NaN, diff(x))在差值数组头部添加NaN,对应每组的首行空缺值
    • 最终将处理结果命名为diff列,合并回原DataFrame

执行上述代码后即可得到符合要求的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:25:33