在dask数据帧

时间:2015-12-11 13:59:28

标签: 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)

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

2 个答案:

答案 0 :(得分:1)

滚动功能

目前dask.dataframe未实施shift操作。如果你raise an issue可能会这样。原则上,这与dask.dataframe 支持的滚动操作没有那么不同,例如rolling_meanrolling_sum等。

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

dask.dataframe

答案 1 :(得分:0)

以下代码可能有助于向下移动该系列。

s = dd_df['column'].rolling(window=2).sum() - dd_df['column']

编辑(03/09/2019):

滚动并找到总和时,对于特定行,

result[i] = row[i-1] + row[i]

然后通过从结果中减去列的旧值,您正在执行以下操作:

final_row[i] = result[i] - row[i]

等于:

final_row[i] = row[i-1] + row[i] - row[i]

这最终会导致整个列下移一次。

提示:

如果要向下移动多行,实际上应该在同一窗口中再次执行整个操作多次。