在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数据帧以进行绘图。
答案 0 :(得分:1)
目前dask.dataframe未实施shift
操作。如果你raise an issue可能会这样。原则上,这与dask.dataframe 支持的滚动操作没有那么不同,例如rolling_mean
,rolling_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]
这最终会导致整个列下移一次。
提示:
如果要向下移动多行,实际上应该在同一窗口中再次执行整个操作多次。