发布
社区首页 >问答首页 >如何正确使用具有应用功能的熊猫群来应对副作用?(第一组申请两次)

如何正确使用具有应用功能的熊猫群来应对副作用?(第一组申请两次)
EN

Stack Overflow用户
提问于 2018-10-08 23:33:45
回答 1查看 776关注 0票数 5

我正在使用熊猫群的特定列在一个数据,并应用自定义功能到这些组。应用的函数利用副作用,并对函数中的全局数据对象进行操作。

对熊猫、群和应用的一个有记录的警告是,通过设计,它在第一组中应用了两次调用的函数,以决定它是否可以采用快速或缓慢的代码路径。这里记录了这一点:http://pandas.pydata.org/pandas-docs/stable/groupby.html#flexible-apply

在这里演示了:

代码语言:javascript
代码运行次数:0
复制
In [144]: d = pd.DataFrame({"a":["x", "y"], "b":[1,2]})

In [145]: def identity(df):
   .....:     print(df)
   .....:     return df
   .....: 

In [146]: d.groupby("a").apply(identity)
   a  b
0  x  1
   a  b
0  x  1
   a  b
1  y  2
Out[146]: 
   a  b
0  x  1
1  y  2

在这里的其他一些堆栈溢出文章中提到:

Python pandas groupby object apply method duplicates first group

Is Pandas 0.16.1 groupby().apply() method applying function more than once to the same group?

在GitHub上提到:

https://github.com/pandas-dev/pandas/issues/7739

https://github.com/pandas-dev/pandas/issues/19167

这意味着我的副作用会在第一组中被调用两次,并导致不必要的改变。

我的问题是如何使用熊猫,群和应用,而不对第一组(或任何一组)施加副作用,并保证每组只调用一次?

我正在考虑在DataFrame顶部创建一个虚拟/假组,但我想将我的问题扩展到堆栈溢出社区,以获得更好的解决方案和其他人的利益。

谢谢你的帮助。

编辑:

按照注释中的要求,提供一些关于自定义功能和副作用的更多细节。

使用带有副作用的自定义函数时,需要在函数的开头和结尾使用全局字典。它用键检索数据,并将这些值应用于行,在函数的末尾,更新后的值被更新到全局字典中,以便新值在下一次迭代中得到反映。

与应用一起使用groupby的主要原因是,它是我在有效地迭代dataframe对象时找到的最快的应用程序。我也看过简单的迭代和列表理解。

EN

回答 1

Stack Overflow用户

发布于 2020-01-30 04:48:43

对这个问题的跟进,截止到2019年7月18日Groupby.apply发布的熊猫版本0.25.0时,它只对第一组进行了一次评估。升级到这个版本可能是解决这个问题的最简单的方法。

在这里发布信息:https://pandas.pydata.org/pandas-docs/stable/whatsnew/v0.25.0.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52711386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档