我有一个名为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数据),例如。
请告诉我怎么做!谢谢!
答案 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