2013-11-08 4 views
1

Я пытаюсь фильтровать результаты GroupBy в панд с помощью примера, приведенного на:Ошибка в результатах GroupBy фильтрации в панд

http://pandas.pydata.org/pandas-docs/dev/groupby.html#filtration

но получаю следующее сообщение об ошибке (панды 0.12):

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-12-d0014484ff78> in <module>() 
     1 grouped = my_df.groupby('userID') 
----> 2 grouped.filter(lambda x: len(x) >= 5) 

/Users/zz/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() 

Что это значит и как его можно решить?

EDIT: код для повторения проблемы в панд 0,12 стабильных

dff = pd.DataFrame({'A': list('222'), 'B': list('123'), 'C': list('123') }) 
dff.groupby('A').filter(lambda x: len(x) > 2) 
+0

Не знаю, как вы получили это, что my_df? (можете ли вы предоставить некоторый код, чтобы воспроизвести это?) –

ответ

2

Это был квази-ошибка в 0.12 и будет fixed in 0.13, то Рез теперь защищен проверкой типа:

if isinstance(res,(bool,np.bool_)): 
    if res: 
     add_indices() 

Я не совсем уверен, как вы получили эту ошибку, однако документы фактически скомпилированы и запущены с помощью реальных панд. Вы должны убедиться, что вы читаете документы для правильной версии (в этом случае вы связывались с dev, а не с стабильной, хотя API в основном не изменился).

standard workaround это сделать это с помощью transform, что в данном случае было бы что-то вроде:

In [11]: dff[g.B.transform(lambda x: len(x) > 2)] 
Out[11]: 
    A B C 
0 2 1 1 
1 2 2 2 
2 2 3 3 
+0

Есть ли способ преодолеть это в пандах 0.12? Я использую pandas 0.12 stable. Ссылка, которую я предоставил, была через поиск, который я нашел в Интернете: \ Я добавил пример, который реплицирует проблему. Спасибо – user2808117

+0

@ user2808117 добавил обход в 0.12 :) –

Смежные вопросы