2016-07-27 6 views
7

Ich muss eine Spalte erstellen, die auf einer Bedingung auf dask Dataframe basiert. In Pandas ist es ziemlich einfach:Erstellen Sie eine if-else-Bedingung Spalte in 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'] ] 

Während in dask I wie unten Gleiche zu tun haben:

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

Fragen:

  1. Gibt es eine bessere/einfachere Art und Weise zu es erreichen?
  2. Ich kann den ersten Dataframe ddf nicht ändern, ich muss ddf1 erstellen, um die Änderungen zu sehen ist dask Dataframe Unveränderliches Objekt?

Antwort

1

Sie könnten nur verwenden:

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

Und dann:

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

Leider ist es Ich habe keine Antwort auf die zweite Frage, oder verstehe ich nicht ...

4

Antworten:

  1. Was Sie jetzt tun, ist fast in Ordnung. Sie müssen nicht compute anrufen, bis Sie für Ihre endgültige Antwort bereit sind.

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

    Für einige Fälle dd.Series.where könnte eine gute Passform

    ddf1 = ddf.assign(col1 = ddf.shop_week.where(cond=ddf.balance > 0, other=0)) 
    
  2. Ab Version 0.10.2 Sie können nun Spalten werden direkt in dask.dataframes einfügen

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

Die sind die Dies-Datenrahmen standardmäßig änderbar oder sind sie nach der Version 0.10.2 veränderbar? –

+1

In der neuesten Version von Dask, Version 0.10.2, unterstützt dask.dataframes die Spaltenzuordnung – MRocklin

+0

Danke für die Antwort @MRocklin –

Verwandte Themen