いきなり条件に合致する行のみで絞ると、そのあとで各区間の区切りが判別できなくなります。
以下のように条件の「立ち上がり」毎にグループ分けして、そのあとに条件に合致する行を抽出すればよいです。
Python
1import pandas as pd
2import numpy as np
3import math
4
5# テストデータ
6v2 = np.array([d for d in range(0,360*3,10)])
7v1 = [50*math.sin(math.radians(d))+10 for d in v2]
8df = pd.DataFrame({'time':v2 * 0.01, 'v1':v1, 'v2':v2})
9
10# 条件の「立ち上がり」行位置にマークをつける
11sr_cur = (df['v1'] > 50).astype(int) # 条件に合致(ON)したか
12sr_pre = sr_cur.shift(1).fillna(0).astype(int) # 前行の条件の状態
13sr_chg = ((sr_pre == 0) & (sr_cur == 1)) # 条件がOFF→ON=「立ち上がり」
14
15# 「立ち上がり」毎にグループ番号を振る
16df['grp'] = sr_chg.cumsum()
17
18# 条件ONの部分のみを抽出
19df = df[(sr_cur == 1)]
20
21# グループ毎に確認表示
22for g, gdf in df.groupby('grp'):
23 print(f'{g}-----')
24 print(gdf)