JuliaDataFrames中是否有diff()函数,比如Pandas?

我在 Julia 中有一个 DataFrame,我想创建一个新列来表示特定列中连续行之间的差异。在 python 熊猫中,我会简单地使用df.series.diff(). 有 Julia 等效项吗?

例如:

data
1
2
4
6
7

# in pandas

df['diff_data'] = df.data.diff()

data   diff_data
1        NaN 
2          1
4          2
6          2
7          1

回答

您可以像这样使用 ShiftedArrays.jl。

声明风格:

julia> using DataFrames, ShiftedArrays

julia> df = DataFrame(data=[1, 2, 4, 6, 7])
5×1 DataFrame
 Row ? data
     ? Int64
?????????????
   1 ?     1
   2 ?     2
   3 ?     4
   4 ?     6
   5 ?     7

julia> transform(df, :data => (x -> x - lag(x)) => :data_diff)
5×2 DataFrame
 Row ? data   data_diff
     ? Int64  Int64?
????????????????????????
   1 ?     1    missing
   2 ?     2          1
   3 ?     4          2
   4 ?     6          2
   5 ?     7          1

命令式(到位):

julia> df = DataFrame(data=[1, 2, 4, 6, 7])
5×1 DataFrame
 Row ? data
     ? Int64
?????????????
   1 ?     1
   2 ?     2
   3 ?     4
   4 ?     6
   5 ?     7

julia> df.data_diff = df.data - lag(df.data)
5-element Vector{Union{Missing, Int64}}:
  missing
 1
 2
 2
 1

julia> df
5×2 DataFrame
 Row ? data   data_diff
     ? Int64  Int64?
????????????????????????
   1 ?     1    missing
   2 ?     2          1
   3 ?     4          2
   4 ?     6          2
   5 ?     7          1

diff你不需要额外的软件包,可以做同样的情况如下:

julia> df.data_diff = [missing; diff(df.data)]
5-element Vector{Union{Missing, Int64}}:
  missing
 1
 2
 2
 1

(问题是这diff是一个通用函数,它确实将向量的长度从 更改为nn-1因此您必须missing在前面手动添加)

  • Adding to this awesome answer by Bogumil, you may also be interested in the TimeSeries.jl package which has "dataframes" with a special column containing times. They have a lag function as well: https://juliastats.org/TimeSeries.jl/stable/apply/#lag-1

以上是JuliaDataFrames中是否有diff()函数,比如Pandas?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>