为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫组。应用方法复制第一组

熊猫组。应用方法复制第一组

炎炎设计 2019-07-15 19:32:17
熊猫组。应用方法复制第一组我的第一个问题是:我对熊猫群体应用方法的这种行为感到困惑(0.12.0-4),它似乎两次将这个函数应用到数据框架的第一行。例如:>>> from pandas import Series, DataFrame>>> import pandas as pd>>> df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count':[1,0,2]})>>> print(df)   class  count  0     A      1  1     B      0    2     C      2我首先检查groupby函数是否正常工作,它似乎很好:>>> for group in df.groupby('class', group_keys = True):>>>     print(group)('A',   class  count0     A      1)('B',   class  count1     B      0)('C',   class  count2     C      2)然后,我尝试使用groupby对象执行类似的操作,并获得第一行输出两次:>>> def checkit(group):>>>     print(group)>>> df.groupby('class', group_keys = True).apply(checkit)  class  count0     A      1  class  count0     A      1  class  count1     B      0  class  count2     C      2任何帮助都将不胜感激!谢谢。编辑:@Jeff提供了下面的答案。我很密集,没有立即理解它,所以这里有一个简单的例子来说明,尽管上面示例中的第一个组有双打印输出,但Apply方法在第一个组上只运行了一次,并且不改变原始数据框架:>>> def addone(group):>>>     group['count'] += 1>>>     return group>>> df.groupby('class', group_keys = True).apply(addone)>>> print(df)      class  count0     A      11     B      02     C      2但是,通过将方法的返回分配给一个新对象,我们可以看到它按预期工作:df 2=df.groupby(‘class’,group_key=True).application(Addone)print(Df 2)      class  count0     A      21     B      12     C      3
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

正如所描述的,这是经过设计的。这里这里

这个apply函数需要知道返回数据的形状,以便智能地确定如何组合数据。为此,它调用函数(checkit(在你的情况下)两次来达到这个目的。

根据实际用例,可以替换对apply带着aggregatetransformfilter,详细描述这里..这些函数要求返回值是特定的形状,因此不要两次调用该函数。

但是,如果您调用的函数没有副作用,那么在第一个值上调用该函数两次可能并不重要。


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 427 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信