Мое приложение должно читать набор данных в dask, распределенном по нескольким разделам.С этим фреймом данных мне нужно выполнить несколько операций над ним (например, вычитая один столбец из другого или находя соотношение двух столбцов).Индекс для фрейма данных - это неуникальный столбец.
Поскольку приложение полностью управляется метаданными, порядок вызовов функций не известен до времени выполнения, поэтому я разработал приложение, которое будет полагаться на возврат нового задержанного фрейма данных.на каждом этапе.Мне было интересно, может ли какое-нибудь умное использование секционирования и конкатенации по столбцам помочь мне сделать этот код эффективным.
Учитывая, что эти шаги не зависят друг от друга, в приведенном ниже конкретном примере я могу доверять последней операции, чтобы датьправильный результат для моего ряда строк?т.е. если я выполняю операции, которые только добавляют новые столбцы к фреймам данных, могу ли я верить, что порядок строк никогда не изменится?
def subtract(df1, df2, col1, col2):
df_mod = copy(df1)
df_mod[f"{col1}-{col2}"] = df1[col1] - df2[col2]
return df_mod
def ratio(df1, df2, col1, col2):
df_mod = copy(df1)
# Rely on the row ordering being unchanged
df_mod[f"{col1}/{col2}"] = df1[col1] / df2[col2]
return df_mod
df = load_function_returns_dask_df()
first = subtract(df, df, "a","b")
second = subtract(df, df, "c","d")
last = ratio(first, second, "a-b","c-d")
Я понимаю, что мог бы работать непосредственно с фреймом данных, чтобы создать новыйстолбец, но это не работает в общем случае для произвольных операций.
Интуитивно понятно, что эта операция должна работать, так как каждый раздел является просто фреймом данных панд, и для панд нет смыслапереупорядочить строки в кадре данных произвольно, но я надеялся на какой-то способ проверить это более формально.