2016-07-27 18 views
7

Potrzebuję utworzyć kolumnę, która jest oparta na pewnych warunkach na beczce danych. W pand jest dość prosta:Utwórz kolumnę warunku if-else w beczce z bazą danych

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'] ] 

Choć w dask muszę zrobić to samo jak poniżej:

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() 

pytania:

  1. Czy jest lepiej/bardziej prosty sposób Osiągnij to?
  2. Nie mogę zmodyfikować pierwszej ramki danych ddf, muszę utworzyć plik ddf1, aby zmiany były beczkowatą ramką danych Niezmienny obiekt?

Odpowiedz

1

mógłby po prostu użyć:

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

, a następnie:

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

Niestety nie mam odpowiedzi na pytanie drugie albo ja nie rozumiem ...

4

odpowiedzi:

  1. To, co teraz robisz, jest prawie w porządku. Nie musisz dzwonić pod numer compute, dopóki nie będziesz gotowy na ostateczną odpowiedź.

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

    Dla niektórych przypadkach dd.Series.where może być dobrym rozwiązaniem

    ddf1 = ddf.assign(col1 = ddf.shop_week.where(cond=ddf.balance > 0, other=0)) 
    
  2. Począwszy od wersji 0.10.2 można teraz wstawić kolumny bezpośrednio do dask.dataframes

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

spacje ramek danych są domyślnie zmienne lub są zmienne po wydaniu wersji 0.10.2? –

+1

W najnowszej wersji Dask, wersja 0.10.2, dask.dataframes obsługuje przypisanie kolumn – MRocklin

+0

Dzięki za odpowiedź @MRocklin –