/ / groupby.filter funziona su serie anziché su dataframes? (Panda): pitone, panda

groupby.filter funziona su serie invece di dataframes? (Panda): pitone, panda

In IPython lo faccio groupby su una normale cornice di dati:

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

Ma filter sembra che stia ottenendo serie invece di frame di dati:

     ...: 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()

Tuttavia, quando lo faccio apply, Sto ricevendo solo i frame dei dati:

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

filter docstring dice che dovrei prendere i Dataframes. Perché? E come posso aggiustarlo? (Voglio semplicemente abbandonare alcuni gruppi da raggruppato per df).

Post scriptum panda == 0.12.0

risposte:

2 per risposta № 1

Internamente, apply e filter prova diversi modi per eseguire il looping dei dati: un "percorso lento" che sicuramente funzionerà per qualsiasi funzione e un "percorso veloce" che funziona solo per alcune funzioni. Questi percorsi possono operare su mandrini interi dei dati (come un DataFrame) o una riga alla volta (come Serie).

I dettagli sono sottili - guarda attraverso pandas/core/groupby.py se vuoi - ma il succo è quello print_obj sta rivelando alcuni di questi interni che non sono pertinenti a ciò che effettivamente si vuole fare.

Quali gruppi vuoi eliminare e quale criterio stai cercando di utilizzare?