Применяется ли dask-датафрейм для сохранения порядка строк - PullRequest
0 голосов
/ 03 апреля 2019

Я рассматриваю возможность использования замыкания с текущим состоянием, чтобы вычислить скользящее окно (которое в моем случае имеет ширину 2), чтобы ответить на мой собственный вопрос , который я недавно задал. Что-то вроде:

def test(init_value):

    def my_fcn(x,y):

        nonlocal init_value
        actual_value = (x + y) * init_value

        init_value = actual_value
        return init_value

    return my_fcn

где my_fcn - фиктивная функция, используемая для тестирования. Поэтому функция может быть инициализирована, например, actual_fcn = test(0);, где мы предполагаем, что начальное значение равно нулю. Наконец, можно использовать функцию через ddf.apply (где ddf - фактический кадр данных dask).

Наконец, вопрос: это сработало бы, если бы порядок вычислений сохранялся, иначе все было бы зашифровано. Я не проверял его, так как - даже если он пройдет - я не могу быть уверен на 100%, что он всегда сохранит порядок. Итак, вопрос:

Сохраняет ли метод применения dask dataframe порядок строк?

Есть еще идеи? Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 04 апреля 2019

Видимо да. Я использую dask 1.0.0.

Следующий код:

import numpy as np
import pandas as pd
import dask.dataframe as dd
number_of_components = 30

df = pd.DataFrame(np.random.randint(0,number_of_components,size=(number_of_components, 4)), columns=list('ABCD'))
my_data_frame = dd.from_pandas(df, npartitions = 1 )


def sumPrevious( previousState ) :

    def getValue(row):
        nonlocal previousState 
        something = row['A'] - previousState 
        previousState = row['A']
        return something
    return getValue

given_func = sumPrevious(1)
out = my_data_frame.apply(given_func, axis = 1 , meta = float).compute()

ведет себя как ожидалось. Существует большое предостережение: если предыдущее состояние предоставляется по ссылке (то есть: это некоторый объект некоторого класса), тогда пользователь должен быть осторожен в использовании равенства внутри вложенной функции для обновления предыдущего состояния: так как оно будет иметь побочные эффекты , если состояние передается по ссылке.

Строго говоря, этот пример не доказывает, что порядок сохраняется при любых обстоятельствах; поэтому мне все равно было бы интересно, могу ли я полагаться на это предположение.

...