 number_lags = 3 df = pd.DataFrame(data={'vals':[5,4,3,2,1]}) for lag in xrange(1, number_lags + 1): df['lag_' + str(lag)] = df.vals.shift(lag) #if you want numpy arrays with no null values: df.dropna().values for numpy arrays