2017-11-17 70 views
1

我試圖使用lambdas作爲函數來應用於創建dask數據框列表的for循環中的dask數據幀。 當我計算每個數據幀時,它們都使用最後一個lambda表達式,而不是循環過程中的一個。Lambda作爲適用於dask數據幀的函數

例子:

ddf = dataframe.from_pandas(pd.DataFrame([[1, 10],[1, 5],[2, 9],[2, 4]], 
columns=['group', 'value']), npartitions=2) 
ddfs = [] 
for val in [2, 100]: 
    ddfs.append(ddf.groupby('group').apply(lambda x : x.sum()+val)) 

輸出:

ddfs[0].compute() 

group value 
2 104 113 
1 102 115 

ddfs[1].compute() 

group value 
2 104 113 
1 102 115 

我認爲他們不應該是一樣的,第一應該是

group value 
2 6 15 
1 4 17 

是怎麼回事?

回答

2

這是python本身的範圍問題。執行該函數時,它在全局範圍內查找val的值,在函數閉包中綁定了而不是

要解決,你需要使用一個可選的關鍵字參數,它在聲明時計算,所以勢必:

for val in [2, 100]: 
    ddfs.append(ddf.groupby('group').apply(lambda x, val=val: x.sum()+val)) 
+0

謝謝,它的工作原理。在lambda函數中不知道關鍵字參數 – AlexFC