如何在满足特定分类条件后 select 接下来的 2 行

How to select next 2 rows after a certain categorical condition is met

| Date   |  Time    | SGN
-----------------------
20201111 | 10:44    |  CB
20201111 | 10:45    |  FF
20201111 | 10:46    |  VW
20201111 | 10:47    |  GG
20201111 | 10:48    |  RR
20201111 | 10:56    |  BB
20201111 | 10:59    |  CB
20201111 | 11:04    |  VW
20201111 | 11:04    |  BB
20201111 | 11:04    |  BR
20201111 | 11:04    |  CB
20201111 | 11:04    |  BB

我正在寻找 'VW' 具体的,我想 select VW 和接下来的两行,考虑到它是按日期时间排序的。

所以输出将是:

| Date   |  Time    | SGN
-----------------------

20201111 | 10:46    |  VW
20201111 | 10:47    |  GG
20201111 | 10:48    |  RR
20201111 | 11:04    |  VW
20201111 | 11:04    |  BB
20201111 | 11:04    |  BR

谢谢。

尝试:

df[df.SGN.where(df.SGN == 'VW').ffill(limit=2).eq('VW')]

#       Date   Time SGN
#2  20201111  10:46  VW
#3  20201111  10:47  GG
#4  20201111  10:48  RR
#7  20201111  11:04  VW
#8  20201111  11:04  BB
#9  20201111  11:04  BR

哪里

  1. df.SGN.where(df.SGN == 'VW') 将所有非 VW 值标记为 NA;
  2. .ffill(limit=2) 将接下来的 3 行(自包含)填写为 VW;
  3. .eq('VW') 为 select 满足条件的所有行创建一个布尔值;

选择:

s = df['SGN'].eq('VW')
s = s | s.shift(1) | s.shift(2) 
df = df[s]

试试这个:

#Loop thru the dataframe
for index, row in df.iterrows():
    if row["SGN"] == "VW":
        print(df.loc[index:].head(3))

这是输出

   Date   Time SGN
2  20201111  10:46  VW
3  20201111  10:47  GG
4  20201111  10:48  RR
       Date   Time SGN
7  20201111  11:04  VW
8  20201111  11:04  BB
9  20201111  11:04  BR