groupby
+cumcount
给每个"id"编号,并过滤掉编号大于2的行:out = df[df.groupby('id').cumcount() > 2]
输出:
id value
3 4 2
4 4 3
8 2 -2
9 2 2
Series.value_counts
和Series.map
来执行布尔索引。new_df = df[df['id'].map(df['id'].value_counts().gt(2))]
id value
3 4 2
4 4 3
8 2 -2
9 2 2
使用 cumcount
是一种方法,但使用 drop
也可以实现
out = df.groupby('id',sort=False).apply(lambda x : x.drop(x.index[:3])).reset_index(drop=True)
Out[12]:
id value
0 4 2
1 4 3
2 2 -2
3 2 2