Мой первый вопрос SO: Я смущен этим поведением метода groupby в pandas (0.12.0-4), он, как представляется, применяет функцию 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)
Затем я пытаюсь сделать что-то подобное, используя apply на объекте groupby, и я получаю первый вывод строки дважды:
>>> 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) печать (df2)
class count
0 A 2
1 B 1
2 C 3