Я обновил это с небольшим количеством настройки для рабочего примера:
import pandas as pd
import numpy as np
s1 = [2,3,3,5,8,np.NAN,5,np.NAN,1]
s2 = [2,np.NAN,2,3,4,np.NAN,2,3,1]
s3 = [np.NAN,np.NAN,2,10,3,7,np.NAN,np.NAN,1]
data = {'time':np.arange(1,9+1),'s_1':s1,'s_2':s2,'s_3':s3}
df = pd.DataFrame(data)
print(df)
Это создаст фрейм данных, который вы разместили выше, но с дополнительной записью в конце, поэтому будут две зоны с непрерывными индексами.
Я думаю, что лучший способ отсюда - отбросить все строки, в которых отсутствуют данные, а затем подсчитать самую длинную последовательность в оставшемся индексе. Нечто подобное должно сработать:
sequence = np.array(df.dropna(how='any').index)
longest_seq = max(np.split(sequence, np.where(np.diff(sequence) != 1)[0]+1), key=len)
print(df.iloc[longest_seq])
Что даст вам:
time s_1 s_2 s_3
2 3 3.0 2.0 2.0
3 4 5.0 3.0 10.0
4 5 8.0 4.0 3.0