选择 pandas 中条件为真的所有行

No_*_*ody 5 python group-by python-3.x pandas pandas-groupby

我有一个数据框

 Id  Seqno. Event
 1     2    A 
 1     3    B 
 1     5    A 
 1     6    A 
 1     7    D
 2     0    E
 2     1    A 
 2     2    B 
 2     4    A 
 2     6    B
Run Code Online (Sandbox Code Playgroud)

我想要获取自每个 ID 最近出现模式 A =​​ 2 以来发生的所有事件。序列号。是每个 ID 的序列号。输出将是

 Id  Seqno. Event 
 1     5    A 
 1     6    A 
 1     7    D
 2     1    A 
 2     2    B 
 2     4    A 
 2     6    B
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过,

  y=x.groupby('Id').apply( lambda 
  x:x.eventtype.eq('A').cumsum().tail(2)).reset_index()
  p=y.groupby('Id').apply(lambda x:       
  x.iloc[0]).reset_index(drop=True)
  q= x.reset_index()
  s= pd.merge(q,p,on='Id')
  dd= s[s['index']>=s['level_1']]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有好的方法可以做到这一点。

cs9*_*s95 3

使用groupbywith cumsum,从每组 A 的计数中减去它,然后过滤:

g = df['Event'].eq('A').groupby(df['Id'])
df[(g.transform('sum') - g.cumsum()).le(1)]

   Id  Seqno. Event
2   1       5     A
3   1       6     A
4   1       7     D
6   2       1     A
7   2       2     B
8   2       4     A
9   2       6     B
Run Code Online (Sandbox Code Playgroud)