删除数据框中每个 ID 的前 n 行
delete the first n rows of each ids in dataframe
我有一个 DataFrame,有两列。我想删除每个 ID 的前 3 行值。如果 id
有 少于或等于 三行,也删除这些行。如下所示,id
s 3 和 1 有 3 行和 2 行,sod 它们应该被删除。对于 id
s 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
我有一个 DataFrame,有两列。我想删除每个 ID 的前 3 行值。如果 id
有 少于或等于 三行,也删除这些行。如下所示,id
s 3 和 1 有 3 行和 2 行,sod 它们应该被删除。对于 id
s 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