假设我有以下 pandas 数据框:
name timestamp
1 event1 9/2016 13:47:49
1 event2 9/2016 13:47:55
1 event3 9/2016 13:49:30
1 event4 9/2016 13:50:49
1 trigger 9/2016 13:51:49
1 event6 9/2016 13:54:49
1 event7 9/2016 13:55:49
1 event8 9/2016 13:56:49
1 event9 9/2016 13:57:49
1 trigger 9/2016 13:58:49
1 event10 9/2016 13:59:49
1 event11 9/2016 13:59:59
1 event12 9/2016 14:00:49
1 event13 9/2016 14:00:59
1 event14 9/2016 14:01:49
我正在尝试执行以下操作: 每当出现触发列时,我想选择最后 3 条记录。所以最后我想要这样:
name timestamp
1 event2 9/2016 13:47:55
1 event3 9/2016 13:49:30
1 event4 9/2016 13:50:49
1 event7 9/2016 13:55:49
1 event8 9/2016 13:56:49
1 event9 9/2016 13:57:49
是否有一个很好的预定义 pandas 函数可以做到这一点,或者我必须迭代数据帧并手动获取它们?
谢谢!
最佳答案
您可以根据name
列是否等于trigger
条件的cumsum
创建一个组变量,然后取出最后三条记录对于每个组(最后一组需要被过滤掉,因为它后面没有trigger
):
g = (df.name == 'trigger').cumsum()
df[g < g.max()].groupby(g[g < g.max()]).tail(3)
# name timestamp
#1 event2 9/2016 13:47:55
#1 event3 9/2016 13:49:30
#1 event4 9/2016 13:50:49
#1 event7 9/2016 13:55:49
#1 event8 9/2016 13:56:49
#1 event9 9/2016 13:57:49
关于python - 从数据框中选择事件出现前的最后 n 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39943736/