Pandas Filter函数返回了一个Series,但是期望一个标量bool

时间:2014-11-20 17:21:56

标签: python pandas filter series

我正在尝试在pandas数据帧上使用过滤器来过滤掉所有匹配重复值的行(当存在重复时需要删除所有行,而不仅仅是第一个或最后一个行。)

这就是我在编辑器中的作用:

df = df.groupby("student_id").filter(lambda x: x.count() == 1)

但是当我使用此代码运行我的脚本时,我收到错误:

  

TypeError:filter函数返回一个Series,但是期望一个标量bool

我在尝试应用过滤器之前,通过连接另外两个帧来创建数据帧。

2 个答案:

答案 0 :(得分:5)

它应该是:

In [32]: grouped = df.groupby("student_id")

In [33]: grouped.filter(lambda x: x["student_id"].count()==1)

<强>更新

我不确定您提到的有关交互式控制台的问题。从技术上讲,在这种特殊情况下(可能还有其他情况,例如复杂的&#34;导入&#34; diff env可能表现不同的功能),控制台(如ipython)的行为应与其他环境相同(orig python env,或者嵌入的一些IDE)

理解pandas groupby的直观方法是将DataFrame.groupby()的返回obj视为数据帧列表。因此,当您尝试使用过滤器在x上应用lambda函数时,x实际上就是其中一个数据帧:

In[25]: df = pd.DataFrame(data,columns=year)

In[26]: df

Out[26]: 
   2013  2014
0     0     1
1     2     3
2     4     5
3     6     7
4     0     1
5     2     3
6     4     5
7     6     7

In[27]: grouped = df.groupby(2013)

In[28]: grouped.count()

Out[28]: 
      2014
2013      
0        2
2        2
4        2
6        2

在此示例中,分组obj中的第一个数据帧将是:

In[33]: df1 = df.ix[[0,4]]

In[34]: df1

Out[33]: 
   2013  2014
0     0     1
4     0     1

答案 1 :(得分:0)

如何使用pd.DataFrame.drop_duplicates()方法?

Documentation

您确定要删除所有行吗?不是n-1?