我正在尝试按任意 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)
- 我可能会用作索引的日期时间值(尽管我不一定想要)
- 非标准长度(即其中一些具有偶数行,而一些具有奇数)。