Pandas Dataframe过滤

时间:2016-01-05 14:19:10

标签: python pandas

给定一个包含两列的数据框:用户和代码,如何过滤掉他们至少不具有给定代码的x个条目的用户条目?

E.g。我想过滤掉所有用户,因为他们至少有5次出现在某种类型的用户:

User    Type
A       Alpha
A       Alpha
A       Alpha
A       Alpha
A       Alpha
A       Beta
A       Beta
A       Beta
B       Alpha
B       Alpha
B       Alpha
B       Alpha
B       Alpha

在这里,我想用Beta代码过滤掉(删除)4x A(这里只有4次),同时保留其他所有内容。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以groupby使用'用户'和'键入'和filter

In [91]:
df.groupby(['User', 'Type']).filter(lambda x: len(x) > 4)

Out[91]:
   User   Type
0     A  Alpha
1     A  Alpha
2     A  Alpha
3     A  Alpha
4     A  Alpha
8     B  Alpha
9     B  Alpha
10    B  Alpha
11    B  Alpha
12    B  Alpha

答案 1 :(得分:1)

  

如何过滤掉他们至少不具有给定代码的x个条目的用户条目?

如果您想知道保留或删除了哪些:

# counts
grouped = df.groupby(['User', 'Type']).apply(lambda g : len(g) > 4) 
grouped = grouped.reset_index(name='keep')
# merge back and filter
data = df.merge(grouped).query('keep == True')
removed = df.merge(grouped).query('keep == False')