Lambda作为dask数据帧的应用函数

时间:2017-11-17 21:51:47

标签: dask

我正在尝试使用lambdas作为函数应用于for循环中的dask数据帧,从而创建一个dask数据帧列表。 当我计算每个数据帧时,它们都使用最后一个lambda表达式而不是循环期间的一个表达式。

示例:

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

是什么给出了?

1 个答案:

答案 0 :(得分:2)

这是python本身的一个范围问题。执行该函数时,它会在全局范围内查找val的值,它在函数闭包中

要修复,您需要使用一个可选的关键字参数,该参数在声明时评估并绑定:

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