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 № 1Internamente, 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?