a = df.values
out1 = (a[:, 1:4] >= a[:, (0), (None)]).argmax(1) + 1
out2 = (a[:, 5:8] <= a[:, (4), (None)]).argmax(1) + 1
df['LowIs'] = out2
df['HighIs'] = out1
df['IsFirst'] = np.where(out1 != out2, np.where(out1 > out2, 'Low', 'High'),
    None)
Fastest way to find which of two lists of columns of each row is true in a pandas dataframe