代码之家  ›  专栏  ›  技术社区  ›  giser_yugang

如何删除熊猫中每组的第一行

  •  2
  • giser_yugang  · 技术社区  · 7 年前

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

       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 回复  |  直到 7 年前
        1
  •  4
  •   jezrael    7 年前

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

    duplicated 具有 boolean 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
    
        2
  •  1
  •   zipa    7 年前

    另一种方法:

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