删除数据框中每个 ID 的前 n 行

delete the first n rows of each ids in dataframe

我有一个 DataFrame,有两列。我想删除每个 ID 的前 3 行值。如果 id 少于或等于 三行,也删除这些行。如下所示,ids 3 和 1 有 3 行和 2 行,sod 它们应该被删除。对于 ids 4 和 2,仅保留第 4、5 行。

import pandas as pd
df = pd.DataFrame()
df ['id'] = [4,4,4,4, 4,2, 2,2,2,2,3,3,3, 1, 1]
df ['value'] = [2,1,1,2, 3, 4, 6,-1,-2,2,-3,5,7, -2, 5]

这是我想要的DataFrame。

使用 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 and 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