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

3
我有一个这样的数据框:

   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:]),但是它没有起作用。请问有谁能帮我吗?提前感谢。

1
这个回答解决了你的问题吗?Python:Pandas - 按组删除第一行 - RichieV
2个回答

5
使用 ilocapply
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

什么是group_keys? - Pyd
@pyd - 好问题 - 为了避免在 groupby.apply 中使用 Multiindex。 - jezrael

1
另一种方法:

df.loc[~df.index.isin(df.drop_duplicates(subset='id').index)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接