Pandas Dask: «ValueError: index must be monotoni c» при выполнении скользящей суммы с помощью groupby.apply - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь выполнить скользящую сумму для фрейма данных 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. График Даска

...