移动 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 does not implement the shift
operation. It could though if you raise an issue。原则上,这与 dask.dataframe 支持的滚动操作没有太大区别,例如 rolling_mean
、rolling_sum
等。
实际上,如果您要创建一个与这些 pandas.rolling_foo
函数遵循相同 API 的 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]
这最终导致整个列向下移动一次。
提示:
如果你想将它向下移动多行,你实际上应该用相同的 window.
再次执行整个操作多次
在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 does not implement the shift
operation. It could though if you raise an issue。原则上,这与 dask.dataframe 支持的滚动操作没有太大区别,例如 rolling_mean
、rolling_sum
等。
实际上,如果您要创建一个与这些 pandas.rolling_foo
函数遵循相同 API 的 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]
这最终导致整个列向下移动一次。
提示:
如果你想将它向下移动多行,你实际上应该用相同的 window.
再次执行整个操作多次