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

lat*_*s64 7 python filter series pandas

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

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

df = df.groupby("student_id").filter(lambda x: x.count() == 1)
Run Code Online (Sandbox Code Playgroud)

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

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

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

leo*_*leo 5

它应该是:

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

In [33]: grouped.filter(lambda x: x["student_id"].count()==1)
Run Code Online (Sandbox Code Playgroud)

更新:

我不确定您提到的有关交互式控制台的问题。从技术上讲,在这种特定情况下(可能存在其他情况,例如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
Run Code Online (Sandbox Code Playgroud)

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

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

In[34]: df1

Out[33]: 
   2013  2014
0     0     1
4     0     1
Run Code Online (Sandbox Code Playgroud)