[英]Shifting all rows in dask dataframe
在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数据帧以进行绘图。
目前dask.dataframe没有实现shift
操作。 如果你提出一个问题,它可能会。 原则上,这是不是从滚动操作是dask.dataframe 不支持,像这样不同的rolling_mean
, rolling_sum
等。
实际上,如果您要创建一个与这些pandas.rolling_foo
函数相同的Pandas函数,那么您可以使用dask.dataframe.rolling.wrap_rolling
函数将您的pandas样式滚动函数转换为dask.dataframe
滚动函数。
dask.dataframe.rolling_sum = wrap_rolling(pandas.rolling_sum)
以下代码可能有助于降低系列。
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]
这最终导致整个专栏下调一次。
小费:
如果你想将它向下移动多行,你应该使用相同的窗口多次重复执行整个操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.