/ / groupby.filter trabalha em séries em vez de quadros de dados? (Pandas) - python, pandas

groupby.filter trabalha em série em vez de quadros de dados? (Pandas) - python, pandas

No IPython eu faço groupby no quadro de dados regular:

grouped
Out[356]: <pandas.core.groupby.DataFrameGroupBy object at 0x7f0e78578750>

Mas filter parece estar recebendo séries em vez de quadros de dados:

     ...: def print_obj(x):
...:     print type(x)
...:     return True
...:



e=grouped.filter(print_obj)
<class "pandas.core.series.Series">
<class "pandas.core.series.Series">
<class "pandas.core.series.Series">
<class "pandas.core.series.Series">
<class "pandas.core.series.Series">
<class "pandas.core.series.Series">
<class "pandas.core.series.Series">
<class "pandas.core.frame.DataFrame">
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-349-a93d384d3560> in <module>()
----> 1 e=grouped.filter(print_obj)

/home/user/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in filter(self, func, dropna, *args, **kwargs)
2092                 res = path(group)
2093
-> 2094             if res:
2095                 indexers.append(self.obj.index.get_indexer(group.index))
2096

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

No entanto, quando eu faço apply, Estou recebendo apenas quadros de dados:

grouped.apply(print_obj)
<class "pandas.core.frame.DataFrame">
...

filter docstring diz que eu deveria estar recebendo Dataframes. Por quê? E como posso corrigir isso? (Quero simplesmente eliminar alguns grupos do agrupado por df).

P.S. pandas == 0.12.0

Respostas:

2 para resposta № 1

Internamente, apply e filter tente maneiras diferentes de fazer um loop pelos dados: um "caminho lento" que funcionará para qualquer função e um "caminho rápido" que funciona apenas para algumas funções. Esses caminhos podem operar em lotes inteiros de dados (como um DataFrame) ou uma linha de cada vez (como Série).

Os detalhes são sutis - veja pandas/core/groupby.py se você quiser - mas a essência é que print_obj está revelando alguns desses internos que não são germain para o que você realmente deseja fazer.

Quais grupos você deseja abandonar e qual critério você está tentando usar?