3

我正在尝试按任意 x 行数对 Dask 数据帧进行下采样。

例如,如果我使用日期时间作为索引,我可以使用:

df = df.resample('1h').ohlc()

但我不想按日期时间重新采样,我想按固定数量的行重新采样......就像:

df = df.resample(rows=100).ohlc()

我做了一堆搜索,发现了这三个旧的 SO 页面:

  • 这个建议:
    • df.groupby(np.arange(len(df))//x),其中 x = 行数。
    • pd.DataFrame(df.values.reshape(-1,2,df.shape[1]).mean(1)),但我很难理解这一点。
    • pd.DataFrame(np.einsum('ijk->ik',df.values.reshape(-1,2,df.shape[1]))/2.0),但我也很难理解这一点。
  • 这又提出了一个建议df.groupby(np.arange(len(df))//x)
  • 这个建议df_sub = df.rolling(x).mean()[::x],但它说这很浪费,而且似乎没有为 Dask 优化。

最好、最快的选择似乎是df.groupby(np.arange(len(df))//x),它在 Pandas 中运行良好。但是,当我在 Dask 中尝试时,我得到:ValueError: Grouper and axis must be same length

如何使用 Dask 按行数重新采样?

我有数据框:

  • 标准索引(例如 1,2,3,4,5...,n)
  • 我可能会用作索引的日期时间值(尽管我不一定想要)
  • 非标准长度(即其中一些具有偶数行,而一些具有奇数)。
4

0 回答 0