df = DataFrame(np.random.randn(10, 2))
start = 3
stop = 4
df.iloc[max(df.index.get_loc(start) - 2, 0):min(df.index.get_loc(stop) + 2,
    len(df))]
efficient way to find several rows above and below a subset of data