开发者社区> 问答> 正文

根据特定条件筛选最近事件的数据框

我有一个数据帧

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
我希望自从最近出现的每个ID的模式A = 2的计数以来发生了所有事件。SEQNO。是每个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
到目前为止我试过,

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']]

展开
收起
一码平川MACHEL 2019-01-23 15:15:05 1524 0
1 条回答
写回答
取消 提交回答
  • 使用groupby与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

    2019-07-17 23:26:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载