Python pandas:删除数据大小低于某个值的数据框中的数据

时间:2016-08-29 02:07:42

标签: pandas dataframe python-3.5

我有一个名为df的数据框(这只是一个例子,真实数据很大,请考虑计算速度)如下:

   name   id     text
    tom    1      a1 
    lucy   2      b1
    john   3      c1
    tick   4      d1
    tom    1      a2 
    lucy   2      b2
    john   3      c2
    tick   4      d2
    tom    1      a3 
    lucy   2      b3
    john   3      c3
    tick   4      d3
    tom    1      a4 
    tick   4      d4
    tom    1      a5 
    lucy   2      b5
    tick   4      d5

数据框可以按名称(tom,john,lucy,tick)分组。我想删除每个组的大小(按名称)少于5的数据。我的意思是因为lucy和john的名称大小小于5,我想删除这些数据并获得新的df(只需要勾选)和tom数据),例如。

请告诉我怎么做!谢谢!

2 个答案:

答案 0 :(得分:2)

我认为您可以使用过滤器。它只会是一行:

df = pd.DataFrame({'name': ['tom','lucy','john','tick','tom','lucy','john','tick', 'tom', 'lucy','john','tick','tom','tick','tom', 'lucy','tick'], 'id':[1,2,3,4,1,2,3,4,1,2,3,4,1,4,1,2,4],'text':['a1','b1','c1','d1','a2','b2','c2','d2','a3','b3','c3','d3','a4','d4','a5','b5','d5']})

df.groupby('name').filter(lambda x: len(x) >= 5)

,输出只有Tick和Tom:

   id  name text
0    1   tom   a1
3    4  tick   d1
4    1   tom   a2
7    4  tick   d2
8    1   tom   a3
11   4  tick   d3
12   1   tom   a4
13   4  tick   d4
14   1   tom   a5
16   4  tick   d5

答案 1 :(得分:2)

您可以使用value_counts(),然后,如果您愿意,可以重置索引reset_index()

s = df.name.value_counts()
print(df[df.name.isin(s[s > 4].index)].reset_index(drop=True))
    name  id text
0   tom   1  a1 
1  tick   4  d1
2   tom   1  a2 
3  tick   4  d2
4   tom   1  a3 
5  tick   4  d3
6   tom   1  a4 
7  tick   4  d4
8   tom   1  a5 
9  tick   4  d5
相关问题