如何在满足特定分类条件后 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
哪里
df.SGN.where(df.SGN == 'VW')
将所有非 VW 值标记为 NA;
.ffill(limit=2)
将接下来的 3 行(自包含)填写为 VW
;
.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
| 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
哪里
df.SGN.where(df.SGN == 'VW')
将所有非 VW 值标记为 NA;.ffill(limit=2)
将接下来的 3 行(自包含)填写为VW
;.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