Как сделать умножение dask.Dataframe из dask.Series на строки? - PullRequest
0 голосов
/ 09 января 2020

normalised = data.mul(alpha, axis=1)

В приведенном выше фрагменте data - dask.Dataframe, а alpha - dask.Series.

Dask вызывает ошибку ValueError: Unable to mul dd.Series with axis=1 при выполнении этого умножения. Эта операция работает, если я вычисляю альфа (например, alpha.compute ()), но так как альфа - большая задача, я хочу избегать вызова вычисления на этой стадии кода.

Кто-нибудь может предложить лучшее решение для выполнения этой операции?

Воспроизводимый пример приведен ниже:

import pandas as pd
import dask.dataframe as dd

df = pd.DataFrame(
    [[1, 2, 3], 
     [1, 2, 3.5], 
     [1, 2, 3.7]], 
    columns = ["A", "B", "C"]
)

ddf = dd.from_pandas(df, npartitions=1)

dv = df.iloc[0]
series = dd.from_pandas(dv, npartitions=1)

ddf.mul(series, axis=1)

1 Ответ

0 голосов
/ 10 января 2020

Операция может быть выполнена с использованием .map_partitions(). Предположим, что series.index == ddf.columns затем:

in_pandas = df.mul(dv, axis=1)
in_dask = ddf.map_partitions(pd.DataFrame.mul, other=series, axis=1, meta=ddf._meta)

import pandas.testing as pdt
pdt.assert_frame_equal(in_pandas, in_dask.compute())
...