2016-07-27 91 views
7

我需要創建一個基於dask數據框某些條件的列。在大熊貓是相當簡單:在dask數據框中創建一個if-else條件列

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. 我不能修改第一個數據幀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數據框默認是可變的,或者它們是0.10.2版本的可變後發佈版本? –

+1

在最新版本的Dask版本0.10.2中,dask.dataframes支持列分配 – MRocklin

+0

感謝您的回答@MRocklin –