繁体   English   中英

在 MultiIndex DataFrame 中的特定观察之前删除行

[英]Drop rows before a specific observation in a MultiIndex DataFrame

对于 MultiIndex DataFrame 中的多个主题( id ),我在不同时间点( dt )有一系列观察结果( status ):

       dt  status
id  n
01  1  xx     abc
    2  xx     xxx
02  1  xx     xxx
    2  xx     abc
    3  xx     xxx
    4  xx     xxx
03  1  xx     xxx
04  1  xx     xxx
    2  xx     xxx
    3  xx     abc

我想在status=='abc'之前删除每个观察结果,以创建一个新的 MultiIndex DataFrame,如下所示:

       dt  status
id  n
01  1  xx     abc
    2  xx     xxx
02  2  xx     abc
    3  xx     xxx
    4  xx     xxx
04  3  xx     abc

最有效的方法是什么?

创建一个布尔掩码以识别statusabc的行,然后按id对掩码进行分组并使用cummax向前传播True值,然后使用生成的掩码过滤行

df[df['status'].eq('abc').groupby('id').cummax()]

      dt status
id n           
01 1  xx    abc
   2  xx    xxx
02 2  xx    abc
   3  xx    xxx
   4  xx    xxx
04 3  xx    abc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM