1

我正在尝试使用以下提供的示例过滤熊猫中的 groupby 结果:

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

但出现以下错误(pandas 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()

这是什么意思,如何解决?

编辑: 在 pandas 0.12 stable 中复制问题的代码

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

1 回答 1

2

这是 0.12 中的一个准错误,将在 0.13 中修复,现在 res 受类型检查保护:

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

我不太确定你是怎么得到这个错误的,但是文档实际上是用实际的 pandas 编译和运行的。您应该确保您正在阅读正确版本的文档(在这种情况下,您链接到的是 dev 而不是 stable - 尽管 API 基本上没有变化)。

标准的解决方法是使用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
于 2013-11-08T07:55:43.293 回答