繁体   English   中英

在dask数据帧中移动所有行

[英]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_meanrolling_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM