我有一个这样的数据框:
id values
0 1 3
1 1 6
2 1 3
3 2 7
4 2 6
5 2 3
6 2 9
我想根据id
删除每个组的第一行,结果应该是这样的:
id values
1 1 6
2 1 3
4 2 6
5 2 3
6 2 9
我尝试通过以下方式完成:df = df.groupby('id').agg(lambda x:x[1:])
,但它不起作用。
有人可以帮助我吗?先谢谢
答案 0 :(得分:3)
将apply
与iloc
:
df = df.groupby('id', group_keys=False).apply(lambda x:x.iloc[1:])
#also working, not sure if generally
#df = df.groupby('id', group_keys=False).apply(lambda x:x[1:])
print (df)
id values
1 1 6
2 1 3
4 2 6
5 2 3
6 2 9
df = df[df['id'].duplicated()]
print (df)
id values
1 1 6
2 1 3
4 2 6
5 2 3
6 2 9
<强>详细强>:
print (df['id'].duplicated())
0 False
1 True
2 True
3 False
4 True
5 True
6 True
Name: id, dtype: bool
答案 1 :(得分:1)
另一种方法:
df.loc[~df.index.isin(df.drop_duplicates(subset='id').index)]