2016-07-27 2 views
7

Мне нужно создать столбец, основанный на некотором условии на dask dataframe. В панд это довольно просто:Создать столбец условия if-else в dask dataframe

ddf['TEST_VAR'] = ['THIS' if x == 200607 else 
       'NOT THIS' if x == 200608 else 
       'THAT' if x == 200609 else 'NONE' 
       for x in ddf['shop_week'] ] 

В то время как в DASK я должен сделать то же самое, как показано ниже:

def f(x): 
    if x == 200607: 
     y= 'THIS' 
    elif x == 200608 : 
     y= 'THAT' 
    else : 
     y= 1 
    return y 

ddf1 = ddf.assign(col1 = list(ddf.shop_week.apply(f).compute())) 
ddf1.compute() 

Вопросы:

  1. Есть ли лучше/более простой способ Добейся этого?
  2. Я не могу изменить первый dataframe ddf, мне нужно создать ddf1, чтобы изменения были dask dataframe Неизменяемый объект?

ответ

1

Вы могли бы просто использовать:

f = lambda x: 'THIS' if x == 200607 else 'NOT THIS' if x == 200608 else 'THAT' if x == 200609 else 'NONE' 

А потом:

ddf1 = ddf.assign(col1 = list(ddf.shop_week.apply(f).compute())) 

К сожалению, у меня нет ответа на второй вопрос, или я ничего не понимаю ...

4

ответы:

  1. То, что вы сейчас делаете, почти нормально. Вам не нужно звонить compute, пока вы не будете готовы к окончательному ответу.

    # ddf1 = ddf.assign(col1 = list(ddf.shop_week.apply(f).compute())) 
    ddf1 = ddf.assign(col1 = ddf.shop_week.apply(f)) 
    

    В некоторых случаях dd.Series.where может быть хорошо подходят

    ddf1 = ddf.assign(col1 = ddf.shop_week.where(cond=ddf.balance > 0, other=0)) 
    
  2. В версии 0.10.2 теперь вы можете вставить столбцы непосредственно в dask.dataframes

    ddf['col'] = ddf.shop_week.apply(f) 
    
+0

dask dataframes изменяются по умолчанию или они являются изменяемыми пост-релизами версии 0.10.2? –

+1

В последней версии Dask, версия 0.10.2, dask.dataframes поддерживает назначение столбцов – MRocklin

+0

Спасибо за ответ @MRocklin –

Смежные вопросы