我有一个大小为659x2的DataFrame
,并根据它的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
有什么高级的方法可以用朱莉娅和DataFrames.jl来实现这一点吗?
我还应该注意,我最初使用Pandas在Python中对解决方案进行了原型化,而b/c --这只是一个PoC --我也没有费心想出如何使用Pandas来实现这个目的(假设它是可能的)。相反,我只是使用Python循环来迭代数据帧的每一行,然后只追加日期大于增长列表的最后一个日期的行。
我现在正试图用Julia更好地编写这篇文章,并研究了filter
和subset
方法在DataFrames.jl中的应用。直观地说,filter
似乎不起作用,因为用户提供的过滤器函数只能访问每一行的内容;subset
可能是可行的,因为它可以访问整个列的数据。但在我看来,如果这是可能的话,如何干净有效地做这件事并不是显而易见的。如果不是,那么我就不得不坚持使用for
循环了。
发布于 2021-10-17 07:39:09
这个任务需要使用performance.
for
循环不会妨碍
dfl[pushfirst!(diff(accumulate(max, dfl.Date)) .> 0, true), :]
https://stackoverflow.com/questions/69601877
复制相似问题