【发布时间】: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 中的 filter 和 subset 方法。直观上filter 似乎不起作用,因为用户提供的过滤器功能只能访问每个传递行的内容; subset 可能是可行的,因为它可以访问整个数据列。但对我来说,如何干净有效地做到这一点并不明显,假设它甚至是可能的。如果没有,那么我猜我也只能在这里使用for 循环。
【问题讨论】: