【发布时间】:2022-01-19 07:12:57
【问题描述】:
我对 pandas 数据帧非常熟悉,但我对 Dask 还是很陌生,所以我仍在努力解决我的代码并行化问题。 我已经使用 pandas 和 pandarallel 获得了我想要的结果,所以我想弄清楚我是否可以使用 Dask 扩大任务或以某种方式加速它。
假设我的数据框将日期时间作为非唯一索引、值列和 id 列。
time value id
2021-01-01 00:00:00.210281 28.08 293707
2021-01-01 00:00:00.279228 28.07 293708
2021-01-01 00:00:00.697341 28.08 293709
2021-01-01 00:00:00.941704 28.08 293710
2021-01-01 00:00:00.945422 28.07 293711
... ... ...
2021-01-01 23:59:59.288914 29.84 512665
2021-01-01 23:59:59.288914 29.83 512666
2021-01-01 23:59:59.288914 29.82 512667
2021-01-01 23:59:59.525227 29.84 512668
2021-01-01 23:59:59.784754 29.84 512669
我要提取的是每秒的最新值。例如如果2021-01-01 00:00:01之前的价格是索引为2021-01-01 00:00:00.945422的行,则最新值为28.07。
在我的情况下,有时索引值不是唯一的,因此作为决胜局,我想使用id 列。 id 编号最大的值将被视为最新值。对于在时间2021-01-01 23:59:59.288914 绑定的三个值的情况,将选择值29.82,因为该日期的最大id 将是512667。另请注意,id 在整个数据集中并不一致,我不能只依靠它来排序我的数据。
在 pandas 中,我只是通过获取最后一个索引来做到这一点
last_index = df.loc[date_minus60: date_curr].index[-1]
last_values = df.loc[last_index]
然后如果last_values.index.is_unique的值为false,我最后执行last_values.sort_values('id').iloc[-1]。
我一直很难将这段代码翻译成 Dask,因为我遇到了关于我的延迟函数的问题,导致他们需要计算才能再次重新索引我的数据帧。
我想知道是否有处理此类问题的最佳做法。
【问题讨论】: