熊猫:如果该组的最后一行具有特定的列值,则如何删除该组的所有行

时间:2020-06-19 21:25:57

标签: python pandas pandas-groupby

我有一个df,如下所示

    a    c    d
0  ABC   0.4  y
1  ABC   0.3  x
2  DEF   0.3  x
3  DEF   0.2  x
4  DEF   0.5  x
5  DEF   0.4  y

我想按“ c”列对df排序,然后对“ a”列进行分组,然后如果该组的最后一行的“ d” =“ y”列的值删除该组的所有行

我的预期输出是

    a    c    d
2  DEF   0.2  x
3  DEF   0.3  x
4  DEF   0.4  y
5  DEF   0.5  x

因此,在按列'c'排序后,组'ABC'被删除,成为组d = y中的最后一行,但组'DEF'保留在DEF中的最后一行col d = x

2 个答案:

答案 0 :(得分:2)

直接从您的逻辑出发:

mask = (df.sort_values('c')     # sort the values by `c`
          .groupby('a')['d']    # groupby `a` and look at `d`
          .transform('last')    # select the last rows
          .ne('y')              # check if last rows are `y`
          .reindex(df.index)    # reindex as the original data
       )

df = df[mask]

输出:

     a    c  d
2  DEF  0.3  x
3  DEF  0.2  x
4  DEF  0.5  x
5  DEF  0.4  y

答案 1 :(得分:1)

让我们做filter

df=df.groupby('a').filter(lambda x : x.at[x['c'].idxmax(),'d']!='y')
Out[278]: 
     a    c  d
2  DEF  0.3  x
3  DEF  0.2  x
4  DEF  0.5  x
5  DEF  0.4  y