我的第一个 SO 问题:我对 pandas(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