Я пытаюсь выполнить скользящую сумму для фрейма данных dask по индексу datetime. В Dask groupby.apply кажется лучшим подходом ... Код отлично работает при установке количества разделов на 1, но ломается, когда мы увеличиваем количество разделов. Благодарен за совет, как исправить приведенный ниже код.
В настоящее время я использую Pandas 1.1.0 и Dask 2.22.0.
from dask import dataframe as dd
import pandas as pd
# initialize dataframe
df = pd.DataFrame({"column1": range(600),
"column2": range(600),
"column3": range(600),
"column4": range(600),
'group': 3*['l'+str(i) for i in range(200)],
'date':pd.date_range("20190101", periods=600)})
# set index to date for rolling window
df=df.set_index('date')
# create dask dataframe from pandas dataframe.
test_dd = dd.from_pandas(df, npartitions=5)
# function used in apply with rolling window on date index
def test_func(x):
x['New_Col'] = x.rolling('3d')['column1'].sum()
return x
# Metadata
m=pd.DataFrame().reindex_like(df)
m=m.reindex(columns=m.columns.tolist()+['New_Col'])
## dask groupby apply
test_dd.groupby('group').apply(test_func,meta=m).compute().head(10)
### Output
ValueError: index must be monotonic
Однако код работает при установке npartitions = 1
## Expected output (output when npartitions=1)
idx column1 column2 column3 column4 group New_Col
date
2019-01-01 0 0 0 0 0 l0 0.0
2019-01-02 1 1 1 1 1 l1 1.0
2019-01-03 2 2 2 2 2 l2 2.0
2019-01-04 3 3 3 3 3 l3 3.0
2019-01-05 4 4 4 4 4 l4 4.0
2019-01-06 5 5 5 5 5 l5 5.0
2019-01-07 6 6 6 6 6 l6 6.0
2019-01-08 7 7 7 7 7 l7 7.0
2019-01-09 8 8 8 8 8 l8 8.0
2019-01-10 9 9 9 9 9 l9 9.0
РЕДАКТИРОВАТЬ: Я прикрепил сюда визуализацию графика dask. График Даска