【发布时间】:2019-06-16 09:58:08
【问题描述】:
我有一个数据框
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 的计数以来发生的所有事件。序号。是每个 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']]
我想知道是否有一个好的方法。
【问题讨论】:
-
第 2 组不应该只包括最后 2 行吗?因为我们正在寻找第二次出现 A 的行......如果我错了,请纠正我。
-
感谢@coldspeed。实际上,对于每个组,我们都从最后一个或最近的事件中计算 A。一旦我们的计数等于 2,我们将返回所有行(包括第二次出现的行),直到该组的结束(最近)事件。
-
逻辑仍然没有意义。对于 ID 2,您将包含 seq no 1 的行,其中 A 的计数仍为 1。
-
是的,@Vaishali,没错。对我来说仍然没有意义,OP。
-
这是从组底部向上计数的第二次出现,然后返回下面的所有内容
标签: python python-3.x pandas group-by pandas-groupby