Lambda作为适用于dask数据帧的函数

问题描述:

我试图使用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 

是怎么回事?

这是python本身的范围问题。执行该函数时,它在全局范围内查找val的值,在函数闭包中绑定了而不是

要解决,你需要使用一个可选的关键字参数,它在声明时计算,所以势必:

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

谢谢,它的工作原理。在lambda函数中不知道关键字参数 – AlexFC