我正在尝试在pandas数据帧上使用过滤器来过滤掉所有匹配重复值的行(当存在重复时需要删除所有行,而不仅仅是第一个或最后一个行。)
这就是我在编辑器中的作用:
df = df.groupby("student_id").filter(lambda x: x.count() == 1)
但是当我使用此代码运行我的脚本时,我收到错误:
TypeError:filter函数返回一个Series,但是期望一个标量bool
我在尝试应用过滤器之前,通过连接另外两个帧来创建数据帧。
答案 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)