2
我能夠按列,使用此代碼離散一個大熊貓數據幀:如何通過與熊貓/ DASK可變箱列離散的大數據幀
import numpy as np
import pandas as pd
def discretize(X, n_scale=1):
for c in X.columns:
loc = X[c].median()
# median absolute deviation of the column
scale = mad(X[c])
bins = [-np.inf, loc - (scale * n_scale),
loc + (scale * n_scale), np.inf]
X[c] = pd.cut(X[c], bins, labels=[-1, 0, 1])
return X
我想用的參數離散每一列:LOC(列的中位數)和比例(列的median absolute deviation)。
對於小數據框,所需的時間是可以接受的(因爲它是單線程解決方案)。
但是,對於較大的數據框,我想利用更多線程(或進程)來加速計算。
我不是Dask的專家,它應該爲這個問題提供解決方案。
然而,在我的情況下,離散化應與代碼是可行的:
import dask.dataframe as dd
import numpy as np
import pandas as pd
def discretize(X, n_scale=1):
# I'm using only 2 partitions for this example
X_dask = dd.from_pandas(X, npartitions=2)
# FIXME:
# how can I define bins to compute loc and scale
# for each column?
bins = [-np.inf, loc - (scale * n_scale),
loc + (scale * n_scale), np.inf]
X = X_dask.apply(pd.cut, axis=1, args=(bins,), labels=[-1, 0, 1]).compute()
return X
但這裏的問題是,loc
和scale
取決於列值,所以它們應該被計算爲每一列,無論是在申請之前或期間。
怎麼辦?
謝謝。我使用工作解決方案編輯了您的問題。如果您認爲它足夠,請接受它。 – gc5