python - 从数据框中选择事件出现前的最后 n 条记录

标签 python pandas select dataframe

假设我有以下 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/

相关文章:

python - 用其他列的值填充列中的空单元格

Python:分组数据的多个过滤器

python - 将 numpy 数组作为行添加到 pandas 中,并以字符串作为索引

mysql - SQL - 匹配两行的条件

python - 在 Django 查询中收到 "missing FROM-clause"编程错误

python - 如何移动 pandas DataFrame 中的多行?

python - sqlalchemy 和 postgresql 的编码错误

python - 使用 loc 的 boolean 索引导致错误

用案例选择

javascript - Grails:将两个g:select的值添加到HTML多重选择列表中