Python Pandas 0.13.1将groupby()与drop_duplicates()或dropna()一起使用

Python Pandas 0.13.1将groupby()与drop_duplicates()或dropna()一起使用,python,pandas,group-by,Python,Pandas,Group By,我刚刚从以前的版本更新到Pandas 0.13.1-很高兴,这为我打开了一些选择。不幸的是,它似乎给我的一些数据争用代码带来了问题。除了从0.11.0更新Pandas版本外,我没有做任何更改 以前有效但不再有效的代码如下: g_pres = g_pres.groupby(['follow','Focal','std_epoch']).dropna(0) 和/或 g_pres = g_pres.groupby(['follow','Focal','std_epoch']).drop_duplic

我刚刚从以前的版本更新到Pandas 0.13.1-很高兴,这为我打开了一些选择。不幸的是,它似乎给我的一些数据争用代码带来了问题。除了从0.11.0更新Pandas版本外,我没有做任何更改

以前有效但不再有效的代码如下:

g_pres = g_pres.groupby(['follow','Focal','std_epoch']).dropna(0)
和/或

g_pres = g_pres.groupby(['follow','Focal','std_epoch']).drop_duplicates(0)
使用任一选项都会导致以下属性错误:

 ---------------------------------------------------------------------------
 AttributeError                            Traceback (most recent call last)
 <ipython-input-169-5d3c7458da40> in <module>()
 ----> 1 g_pres = g_pres.groupby(['follow','Focal','std_epoch']).dropna(0)

 //anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in __getattr__(self, attr)
     293 
     294         if hasattr(self.obj, attr) and attr != '_cache':
     --> 295             return self._make_wrapper(attr)
     296 
     297         raise AttributeError("%r object has no attribute %r" %

//anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in _make_wrapper(self, name)
    308                    "using the 'apply' method".format(kind, name,
    309                                                      type(self).__name__))
--> 310             raise AttributeError(msg)
    311 
    312         f = getattr(self.obj, name)

AttributeError: Cannot access callable attribute 'dropna' of 'DataFrameGroupBy' objects,         try using the 'apply' method
示例输出,其中我希望按follow、std_epoch和Focal进行分组——并从列“0”中删除重复值,分组方式(在本例中,这是输入中的第2行)


解决方案:基本上是重新思考问题。正如我在评论中指出的,我不需要使用groupby删除重复项,我只是将它们放在我以前代码中的同一行中。我仍然不清楚为什么这会在以前没有的地方产生一个错误(也许它应该总是抛出一个错误,尽管它确实产生了我想要的结果!)。然而,我现在只是用两行代码来完成这项工作

要删除重复项,请执行以下操作:

 df = df.drop_duplicates()
要创建分组对象,请执行以下操作:

df = df.groupby(['column1','column2'])

为了在分组的数据帧上应用方法;您需要按如下方式使用循环:

display = IPython.display.display

g_pres = g_pres.groupby(['follow','Focal','std_epoch'])

for a,b in g_pres:
    z = b.dropna(0)
    display(z)

woops-感谢您的编辑,@EdChumyou不能在群中删除na;没有意义,这只是一个组列表;你想过滤吗?你想干什么?给出一个输入和输出的小例子8!根据定义,如果在重复的列上
groupby
,则生成的组没有重复项!哈哈……你说得对!具有讽刺意味的是,我们刚刚就增强groupby的文档进行了一次完整的讨论:@M.a.Kline在0.13的发行说明中有一行关于这一点的内容(
开始删除在groupby对象上没有意义的方法(GH4887)
),但我认为你没有找到这一行是正常的…:-)。因此,这一方法以前确实有效的原因是,所有可用于数据帧的方法也可用于GroupBy对象,而现在只有在白名单中明确列出的方法(有意义的方法)我遇到了类似的问题,并通过
df.GroupBy('my_column').apply(pd.Series.dropna)
解决了它。但是由于我入党晚了,版本就不一样了:-)
df = df.groupby(['column1','column2'])
display = IPython.display.display

g_pres = g_pres.groupby(['follow','Focal','std_epoch'])

for a,b in g_pres:
    z = b.dropna(0)
    display(z)