【问题标题】:Filter/select rows by comparing to previous rows when using DataFrames.jl?使用 DataFrames.jl 时通过与以前的行进行比较来过滤/选择行?
【发布时间】:2021-10-17 06:35:09
【问题描述】:

我有一个DataFrame,其大小为 659 x 2,并根据其Low 列进行排序。它的前 20 行如下所示:

julia> size(dfl)
(659, 2)

julia> first(dfl, 20)
20×2 DataFrame
 Row │ Date        Low
     │ Date…       Float64
─────┼──────────────────────
   1 │ 2010-05-06  0.708333
   2 │ 2010-07-01  0.717292
   3 │ 2010-08-27  0.764583
   4 │ 2010-08-31  0.776146
   5 │ 2010-08-25  0.783125
   6 │ 2010-05-25  0.808333
   7 │ 2010-06-08  0.820938
   8 │ 2010-07-20  0.82375
   9 │ 2010-05-21  0.824792
  10 │ 2010-08-16  0.842188
  11 │ 2010-08-12  0.849688
  12 │ 2010-02-25  0.871979
  13 │ 2010-02-23  0.879896
  14 │ 2010-07-30  0.890729
  15 │ 2010-06-01  0.916667
  16 │ 2010-08-06  0.949271
  17 │ 2010-09-10  0.949792
  18 │ 2010-03-04  0.969375
  19 │ 2010-05-17  0.9875
  20 │ 2010-03-09  1.0349

我想做的是过滤掉此数据框中的所有行,以便只保留日期单调递增的行。因此,如果应用于上面的前 20 行,我希望输出如下:

julia> my_filter_or_subset(f, first(dfl, 20))
5×2 DataFrame
 Row │ Date        Low
     │ Date…       Float64
─────┼──────────────────────
   1 │ 2010-05-06  0.708333
   2 │ 2010-07-01  0.717292
   3 │ 2010-08-27  0.764583
   4 │ 2010-08-31  0.776146
   5 │ 2010-09-10  0.949792

是否有一些高级方法可以使用 Julia 和 DataFrames.jl 实现这一目标?

我还应该注意到,我最初使用 Pandas 在 Python 中对解决方案进行了原型设计,而 b/c 这只是一个 PoC,我也没有费心去弄清楚如何使用 Pandas 来实现这一点(假设它甚至是可能的) .相反,我只是使用 Python for 循环遍历数据帧的每一行,然后只附加日期大于增长列表的最后一个日期的行。

我现在正尝试在 Julia 中更好地编写此代码,并查看了 DataFrames.jl 中的 filtersubset 方法。直观上filter 似乎不起作用,因为用户提供的过滤器功能只能访问每个传递行的内容; subset 可能是可行的,因为它可以访问整个数据列。但对我来说,如何干净有效地做到这一点并不明显,假设它甚至是可能的。如果没有,那么我猜我也只能在这里使用for 循环。

【问题讨论】:

    标签: dataframe filter julia


    【解决方案1】:
    1. 最后你需要使用for循环来完成这个任务(你必须循环所有的值)
    2. 在 Julia 中循环速度很快,因此使用您自己的 for 循环不会影响性能。
    3. 如果您正在寻找相对较短的输入内容(但它会比自定义 for 循环慢,因为它会分多次执行操作),您可以使用例如:
    dfl[pushfirst!(diff(accumulate(max, dfl.Date)) .> 0, true), :]
    

    【讨论】:

    • 好的,谢谢,我就是这么想的。
    猜你喜欢
    • 2019-10-17
    • 2020-11-12
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多