Python Lambda groupby to function和Stop Iteration

时间:2014-12-12 13:48:55

标签: python pandas lambda

我写了一个我能够成功使用的函数:

createdata(df)

结果是正确的。例如,输出包括数据帧中每行的1个结果行,如预期的那样,并且计算是正确的。我的问题是由于内存限制,我无法同时通过该函数运行整个数据帧,所以我必须迭代地通过函数发送数据帧。

我无法逐行将数据帧发送到函数,因为算法中存在按组排序的方式。所以我必须一次向函数发送至少一组数据。我尝试了groupby.apply,但是由于apply在第一组上调用了两次函数,因此出现意外结果。所以现在我正在使用像这样的lambda。

df.groupby(["x", "y"]).apply(lambda x: createdata(df))

有了这个,我得到了正确的计算,但我为每个输入行得到了4行相同的输出。完成后我也会收到Stop Iteration异常。

在没有深入了解函数的细节的情况下,我可以在我的方法中纠正一次,只需在一组数据帧上迭代我的函数吗?

1 个答案:

答案 0 :(得分:0)

我不知道关于熊猫的情况,但是从快速浏览一下您的代码和文档,我认为您希望将x传递给createdata,而不是df

 df.groupby(["x", "y"]).apply(lambda x: createdata(x))

另外,请注意根据文档:

  

在当前实现中,在第一个上应用调用func两次   组来决定是否可以采用快速或慢速代码路径。这个可以   如果func有副作用,会导致意外行为   对第一组生效两次。

http://pandas.pydata.org/pandas-docs/version/0.15.1/groupby.html#flexible-apply