移动dask数据框中的所有行

Tro*_*rts 5 python numpy pandas dask

在 Pandas 中,有一个方法 DataFrame.shift(n) 将数组的内容相对于索引移动 n 行,类似于 np.roll(a, n)。我似乎无法找到一种使用 Dask 获得类似行为的方法。我意识到使用 Dask 的分块系统可能难以管理诸如行移位之类的事情,但我不知道将每一行与后续行进行比较的更好方法。

我希望能够做的是:

import numpy as np
import pandas as pd
import dask.DataFrame as dd

with pd.HDFStore(path) as store:
    data = dd.from_hdf(store, 'sim')[col1]
    shifted = data.shift(1)

    idx = data.apply(np.sign) != shifted.apply(np.sign)
Run Code Online (Sandbox Code Playgroud)

为了创建一个布尔系列,指示数据中符号变化的位置。(我知道该方法也会捕获从有符号值到零的更改)然后我将使用布尔系列来索引不同的 Dask 数据框以进行绘图。

MRo*_*lin 1

滚动功能

目前dask.dataframe没有实现该shift操作。如果您提出问题,也可以。原则上,这与 dask.dataframe支持的滚动操作没有太大不同,例如rolling_meanrolling_sum等。

实际上,如果您要创建一个遵循与这些函数相同的 API 的 Pandas 函数pandas.rolling_foo,那么您可以使用该dask.dataframe.rolling.wrap_rolling函数将 pandas 风格的滚动函数转换为dask.dataframe滚动函数。

dask.dataframe.rolling_sum = wrap_rolling(pandas.rolling_sum)
Run Code Online (Sandbox Code Playgroud)