如何删除pandas中每个组的第一行

时间:2018-05-23 10:32:36

标签: python pandas

我有一个这样的数据框:

   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:]),但它不起作用。

有人可以帮助我吗?先谢谢

2 个答案:

答案 0 :(得分:3)

applyiloc

一起使用
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

duplicatedboolean indexing

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)]