【发布时间】:2014-02-18 19:59:46
【问题描述】:
我的第一个 SO 问题: 我对熊猫(0.12.0-4)中 groupby 的应用方法的这种行为感到困惑,它似乎将函数 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
【问题讨论】:
-
从 v0.25 开始,行为将发生变化,因此第一组只评估一次。 Please see here.
-
请将接受的答案更新为此answer,因为旧答案不再有效。
标签: python pandas group-by pandas-groupby