python groupby apply_Python-熊pandasGroupBy.apply方法复制第一个组

我的第一个SO问题:我对在熊猫(0.12.0-4)中groupby的apply方法的这种行为感到困惑,它似乎将TWICE函数应用于数据帧的第一行。例如:

>>> 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 count

0 A 1)

('B', class count

1 B 0)

('C', class count

2 C 2)

然后,我尝试对groupby对象应用apply来执行类似的操作,并且两次获得第一行输出:

>>> def checkit(group):

>>> print(group)

>>> df.groupby('class', group_keys = True).apply(checkit)

class count

0 A 1

class count

0 A 1

class count

1 B 0

class count

2 C 2

任何帮助,将不胜感激!谢谢。

编辑:@Jeff提供以下答案。我很忙,并没有立即理解它,因此,这是一个简单的示例,显示尽管上面的示例中第一组的两次打印输出,apply方法仅对第一组操作一次,并且不会改变原始数据帧:

>>> def addone(group):

>>> group['count'] += 1

>>> return group

>>> df.groupby('class', group_keys = True).apply(addone)

>>> print(df)

class count

0 A 1

1 B 0

2 C 2

但是通过将方法的返回值分配给新对象,我们看到它可以按预期工作:

df2 = df.groupby('class',group_keys = True).apply(addone)print(df2)

class count

0 A 2

1 B 1

2 C 3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值