Dask dataframe - разбить столбец на несколько строк на основе разделителя

У вас есть реализация кривой Лоренца и индекса Gini в RevoScaleR , которая позволяет вам получать вычисления кусками, независимо от размера вектора.

set.seed(42)
my_vec = data.frame(V1 = sample(1:100000, 40000, replace = T))

# Compute Lorenz
lorenzOut <- rxLorenz(orderVarName = "V1", data = my_vec)

# Compute the Gini Coefficient
giniCoef <- rxGini(lorenzOut)
giniCoef
0.335597

CI:

boot <- replicate(1000, rxGini(rxLorenz(orderVarName = "V1", 
                                data = my_vec[sample.int(nrow(my_vec), nrow(my_vec), replace = TRUE), , drop = FALSE], reportProgress = 0)))

summary(boot)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.3315  0.3347  0.3356  0.3356  0.3364  0.3396 

quantile(boot, probs = c(0.005, 0.995))
     0.5%     99.5% 
0.3324822 0.3389219 

5
задан ltt 21 January 2019 в 01:19
поделиться

1 ответ

Dask позволяет вам использовать панды непосредственно для операций, которые являются построчными (например, такими) или могут применяться по одному разделу за раз. Помните, что фрейм данных Dask состоит из набора фреймов данных Pandas.

Для случая с Пандами вы должны сделать это, основываясь на связанных вопросах:

df = pd.DataFrame([["A", "Z,Y"], ["B", "X"], ["C", "W,U,V"]], 
    columns=['var1', 'var2'])
df.drop('var2', axis=1).join(
    df.var2.str.split(',', expand=True).stack().reset_index(drop=True, level=1).rename('var2'))

, поэтому для Dask вы можете применить точно такой же метод через map_partitions, потому что каждая строка не зависит от всех остальных. , Возможно, это выглядело бы чище, если бы переданная функция была записана отдельно, а не как лямбда:

d = dd.from_pandas(df, 2)
d.map_partitions(
    lambda df: df.drop('var2', axis=1).join(
        df.var2.str.split(',', expand=True).stack().reset_index(drop=True, level=1).rename('var2')))

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

0
ответ дан mdurant 21 January 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: