获取最后一次在熊猫中出现特定值之后的所有行

时间:2019-02-14 17:31:32

标签: python pandas dataframe group-by pandas-groupby

我的数据框看起来像

ID  colA  
1      B     
1      D     
2      B    
2      D     
2      C     

我已返回每个组中最后一次发生事件B之后的所有行。输出将是:

ID  colA   
1      D   
2      D     
2      C  

我尝试了

a = df['colA'].str.contains('B').groupby(df['ID'])
b = df[(a.transform('sum') - a.cumsum()).eq(0)]

,到目前为止一切正常。我只是想知道是否还有其他方法可以实现这一目标?

3 个答案:

答案 0 :(得分:4)

反转行(这很重要)。然后调用groupbycumsum,并获取(求和的)求和值等于零的所有行。

df[df.colA.eq('B')[::-1].astype(int).groupby(df.ID).cumsum().eq(0)]

   ID colA
1   1    D
3   2    D
4   2    C

答案 1 :(得分:2)

IIUC

def yourlast(x):
        return x.loc[x.colA.where(df.colA.eq('B')).last_valid_index()+1:]
df.groupby('ID').apply(yourlast)
Out[163]: 
      ID colA
ID           
1  1   1    D
2  3   2    D
   4   2    C

答案 2 :(得分:2)

您可以这样做:

ix = (df.colA.eq('B')
        .cumsum()
        .groupby(df.ID)
        .apply(lambda x: x.loc[x.idxmax()+1:]).index.get_level_values(1))

df.loc[ix,:]

    ID colA
1   1    D
3   2    D
4   2    C