2013-12-16 5 views
0

Я не могу на всю жизнь понять, почему метод фильтра отказывается работать с моими файлами данных в пандах.pandas group filter issue

Вот пример, показывающий, мой вопрос:

In [99]: dff4 
Out[99]: <pandas.core.groupby.DataFrameGroupBy object at 0x1143cbf90> 

In [100]: dff3 
Out[100]: <pandas.core.groupby.DataFrameGroupBy object at 0x11439a810> 

In [101]: dff3.groups 
Out[101]: 
{'iphone': [85373, 85374], 
'remote_api_created': [85363, 
    85364, 
    85365, 
    85412]} 

In [102]: dff4.groups 
Out[102]: {'bye': [3], 'bye bye': [4], 'hello': [0, 1, 2]} 

In [103]: dff4.filter(lambda x: len(x) >2) 
Out[103]: 
    A  B 
0 0 hello 
1 1 hello 
2 2 hello 

In [104]: dff3.filter(lambda x: len(x) >2) 
Out[104]: 
Empty DataFrame 
Columns: [source] 
Index: [] 

Обратите внимание, как фильтр отказывается работать на dff3.

Любая помощь приветствуется.

ответ

2

Если группа по имени столбца, вы переместите его в индекс, так что ваш dataframe становится пустым, если нет других столбцов нет, см:

>>> def report(x): 
...  print x 
...  return True 
>>> df 
        source 
85363 remote_api_created 
85364 remote_api_created 
85365 remote_api_created 
85373    iphone 
85374    iphone 
85412 remote_api_created 

>>> df.groupby('source').filter(report) 
Series([], dtype: float64) 
Empty DataFrame 
Columns: [] 
Index: [85373, 85374] 
Series([], dtype: float64) 
Empty DataFrame 
Columns: [source] 
Index: [] 

можно сгруппировать по значениям столбцов:

>>> df.groupby(df['source']).filter(lambda x: len(x)>2) 
        source 
85363 remote_api_created 
85364 remote_api_created 
85365 remote_api_created 
85412 remote_api_created 
+0

Я потратил часы, пытаясь понять это. Благодаря тонну. – Dalupus